2012-08-01 8 views
1

List의 두 값을 비교하는 방법을 알고 싶었습니다. 예를 들어 List의 이름에 values (예 : (Ana, Ben, Maria, Ana))이 많이 포함되어있을 수 있습니다. 이 목록에서 Ana라는 이름이 두 번 나열되었으므로 데이터베이스에 한 번만 삽입해야합니다. 그렇지 않으면 오류가 반환됩니다. 나는 유일한 제약이 이것을 해결할 수 있지만, 현재 작업중인 현재 grails 프로젝트에서는 요구 사항이 아니라는 것을 알고 있습니다. 그렇다면 고유 한 제약 조건을 사용하지 않고 데이터베이스에 값을 삽입하기 전에 목록의 값을 어떻게 비교할 수 있습니까?List에서 두 값을 비교하는 방법은 무엇입니까?

도와주세요! 감사합니다.

답변

1

을 가정하면 당신은 그루비의 unique 방법을 피하고 싶은 의미하지 않는다, 당신은이 작업을 수행 할 수 있습니다 ([ 'Ana', 'Ben', 'Maria' ]입니다) names에서 새 목록을 만들고 주장

List names = [ 'Ana', 'Ben', 'Maria', 'Ana' ] 

assert names.unique(false) != names 

이 아니다 원래 목록과 동일합니다.

그러면 새 목록이 passed false to the unique method으로 생성됩니다. true을 전달하면 원래 목록이 수정됩니다 ...

0

목록 대신 반복되는 요소가없는 집합을 사용할 수 있습니다. names 변수를 Set으로 선언하면 반복되는 요소를 추가 할 수 없습니다. 변수를 볼 때마다 고유 한 요소로 자연스럽게 채워질 수 있습니다. 한 세트에 목록을 변환 할 경우에도

, 당신은 다만 할 수 있습니다

def uniqueNames = names as Set 
+0

당신은 아차 Set' 당신이 –

+0

:-) 유형을 선언하는 경우'필요가 없습니다. 진실한 이야기. 나는 내가 의미하는 것이 'def'라고 생각한다. 감사! ;) –

+0

[@tim_yates] (http://stackoverflow.com/questions/11757122/how-to-compare-two-values-from-a-list#comment15619444_11763109) 호기심이 많아서 두 가지 방법으로 시도해 보았습니다. Groovyc가 생성하는 바이트 코드. 타입을 선언했는지 또는 as 연산자를 사용하는지 그 것처럼 보입니다. Groovy는리스트를 생성 한 다음 그것을 세트로 변환합니다. 유일한 차이점은 충분히 강력한 이유가있는 경우 'as'연산자를 재정의 할 수 있다는 것입니다. –

관련 문제