Wie finde ich heraus, ob ein Array ein Element enthält? Ich dachte, es könnte so etwas geben, [1, 2, 3].includes(1)
das als bewertet wird true
.
assert [12,42,33].indexOf(42) == 1
Wie finde ich heraus, ob ein Array ein Element enthält? Ich dachte, es könnte so etwas geben, [1, 2, 3].includes(1)
das als bewertet wird true
.
assert [12,42,33].indexOf(42) == 1
Antworten:
.contains () ist die beste Methode für Listen, aber für Karten müssen Sie .containsKey () oder .containsValue () verwenden.
[a:1,b:2,c:3].containsValue(3)
[a:1,b:2,c:3].containsKey('a')
if(aMap["aKey"]==aValue)
.
Etwas Syntaxzucker
1 in [1,2,3]
def m = [a: true]; 'a' in m
→ wahr noch def m = [a: false]; 'a' in m
falsch → falsch!
Verwenden Sie für Listen contains
:
[1,2,3].contains(1) == true
true == true
, natürlich #joke
Wenn Sie Ihre Includes-Methode wirklich in einer ArrayList haben möchten, fügen Sie sie einfach hinzu:
ArrayList.metaClass.includes = { i -> i in delegate }
WICHTIG Gotcha für die Verwendung von .contains () für eine Sammlung von Objekten, z. B. Domains. Wenn die Domain-Deklaration einen EqualsAndHashCode oder eine andere equals () -Implementierung enthält, um festzustellen, ob diese Ojbects gleich sind, und Sie sie wie folgt festgelegt haben ...
import groovy.transform.EqualsAndHashCode
@EqualsAndHashCode(includes = "settingNameId, value")
Dann wertet die .contains (myObjectToCompareTo) die Daten in myObjectToCompareTo mit den Daten für jede Objektinstanz in der Sammlung aus. Wenn Ihre Equals-Methode nicht dem Schnupftabak entspricht, wie meine nicht, werden möglicherweise unerwartete Ergebnisse angezeigt.
Sie können den Mitgliedschaftsoperator verwenden:
def list = ['Grace','Rob','Emmy']
assert ('Emmy' in list)