2012-08-01 60 views
1

我想知道如何比較列表的兩個值。 例如,我有一個List名稱可能包含許多values(Ana, Ben, Maria, Ana)。從這個列表中,因爲名稱Ana被列出兩次,所以它只能被插入數據庫一次,否則會返回一個錯誤。我知道獨特的限制可以解決這個問題,但這並不是我正在開發的當前Grails項目的要求。那麼在將它們插入我的數據庫而不使用唯一約束之前,我將如何比較我列表的值?如何比較列表中的兩個值?

請幫忙! 謝謝!

回答

1

假設你不是說你想避免在Groovy中unique方法,你可以這樣做:

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

assert names.unique(false) != names 

這就產生從names一個新的列表(這是[ 'Ana', 'Ben', 'Maria' ]),並聲稱這是不與原始列表相同。

它創建一個新列表,我們passed false to the unique method。如果你通過true,它會修改原來的列表...

0

而不是一個列表,你可以使用一個Set,它不允許重複的元素。如果您將您的名稱變量聲明爲Set,那麼將不可能添加重複的元素。每次查看變量時,都可以確定它自然充滿了獨特的元素。

另外,如果你想你的列表轉換爲一組,你可以做:

def uniqueNames = names as Set 
+0

你不需要'因爲Set'如果你聲明的類型:-) – 2012-08-01 16:32:15

+0

哎呀。真實的故事。我想我的意思是'def'。謝謝! ;) – 2012-08-01 16:50:56

+0

[@tim_yates](http://stackoverflow.com/questions/11757122/how-to-compare-two-values-from-a-list#comment15619444_11763109)我很好奇,所以我嘗試了兩種方式,並比較groovyc產生的字節碼。它看起來像是聲明類型還是使用'as'運算符Groovy創建一個List,然後將其轉換爲Set。唯一的區別是,如果你有充分的理由這麼做,你可以重寫'as'運算符。 – 2012-08-01 18:58:05