groovy配列/ハッシュ/コレクション/リストの要素かどうかを確認するにはどうすればよいですか?


127

配列に要素が含まれているかどうかを確認するにはどうすればよいですか?[1, 2, 3].includes(1)と評価されるようなものがあるのではないかと思いましたtrue


この等しい要素がリストのどこにあるのかからもインデックスを見つけることができますか?
Atharva Johri

2
@AtharvaJohriassert [12,42,33].indexOf(42) == 1
リッグス

回答:


138

.contains()はリストに最適な方法ですが、マップの場合は.containsKey()または.containsValue()を使用する必要があります

[a:1,b:2,c:3].containsValue(3)
[a:1,b:2,c:3].containsKey('a')

また、特定のキーの下にあるnull以外の値がマップに含まれているかどうかを確認するには、次の式を確認するだけで十分if(aMap["aKey"]==aValue)です。
Naeel Maqsudov


55

リストの場合は、次を使用しますcontains

[1,2,3].contains(1) == true

16
おそらく、[1,2,3] .contains(1)と言いたいでしょう。私が推測しているのは、関数自体がすでにブール値を返しているためです。なぜハードコードされた「true」と再度比較したいのですか?
Harshay Buradkar 2012年

6
@HarshayBuradkar確かtrue == trueに、もちろん#joke
Automatico


3

ドメインなどのオブジェクトのコレクションで.contains()を使用するための重要な注意点。Domain宣言にEqualsAndHashCodeまたは他のequals()実装が含まれていて、それらのオブジェクトが等しいかどうかを判断し、次のように設定した場合...

import groovy.transform.EqualsAndHashCode
@EqualsAndHashCode(includes = "settingNameId, value")

次に、.contains(myObjectToCompareTo)は、コレクション内の各Objectインスタンスのデータを使用して、myObjectToCompareToのデータを評価します。したがって、あなたのequalsメソッドが十分ではない場合、私の場合と異なり、予期しない結果が生じる可能性があります。


2
def fruitBag = ["orange","banana","coconut"]
def fruit = fruitBag.collect{item -> item.contains('n')}

私はこれをこのようにしたので、誰かがそれを探していればうまくいきます。



0

次のように、正規表現で一致を使用することもできます。

boolean bool = List.matches("(?i).*SOME STRING HERE.*")
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.