我想知道如何比較列表的兩個值。 例如,我有一個List
名稱可能包含許多values
如(Ana, Ben, Maria, Ana)
。從這個列表中,因爲名稱Ana被列出兩次,所以它只能被插入數據庫一次,否則會返回一個錯誤。我知道獨特的限制可以解決這個問題,但這並不是我正在開發的當前Grails項目的要求。那麼在將它們插入我的數據庫而不使用唯一約束之前,我將如何比較我列表的值?如何比較列表中的兩個值?
請幫忙! 謝謝!
我想知道如何比較列表的兩個值。 例如,我有一個List
名稱可能包含許多values
如(Ana, Ben, Maria, Ana)
。從這個列表中,因爲名稱Ana被列出兩次,所以它只能被插入數據庫一次,否則會返回一個錯誤。我知道獨特的限制可以解決這個問題,但這並不是我正在開發的當前Grails項目的要求。那麼在將它們插入我的數據庫而不使用唯一約束之前,我將如何比較我列表的值?如何比較列表中的兩個值?
請幫忙! 謝謝!
假設你不是說你想避免在Groovy中unique
方法,你可以這樣做:
List names = [ 'Ana', 'Ben', 'Maria', 'Ana' ]
assert names.unique(false) != names
這就產生從names
一個新的列表(這是[ 'Ana', 'Ben', 'Maria' ]
),並聲稱這是不與原始列表相同。
它創建一個新列表,我們passed false
to the unique
method。如果你通過true
,它會修改原來的列表...
而不是一個列表,你可以使用一個Set,它不允許重複的元素。如果您將您的名稱變量聲明爲Set,那麼將不可能添加重複的元素。每次查看變量時,都可以確定它自然充滿了獨特的元素。
另外,如果你想你的列表轉換爲一組,你可以做:
def uniqueNames = names as Set
你不需要'因爲Set'如果你聲明的類型:-) – 2012-08-01 16:32:15
哎呀。真實的故事。我想我的意思是'def'。謝謝! ;) – 2012-08-01 16:50:56
[@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