Jak sprawdzić, czy tablica zawiera element? Pomyślałem, że może istnieć coś takiego, [1, 2, 3].includes(1)
co można ocenić jako true
.
assert [12,42,33].indexOf(42) == 1
Jak sprawdzić, czy tablica zawiera element? Pomyślałem, że może istnieć coś takiego, [1, 2, 3].includes(1)
co można ocenić jako true
.
assert [12,42,33].indexOf(42) == 1
Odpowiedzi:
.contains () jest najlepszą metodą w przypadku list, ale w przypadku map należy użyć .containsKey () lub .containsValue ()
[a:1,b:2,c:3].containsValue(3)
[a:1,b:2,c:3].containsKey('a')
if(aMap["aKey"]==aValue)
.
Trochę cukru składniowego
1 in [1,2,3]
def m = [a: true]; 'a' in m
→ prawda, ale def m = [a: false]; 'a' in m
→ fałsz!
W przypadku list użyj contains
:
[1,2,3].contains(1) == true
true == true
, oczywiście # żart
Jeśli naprawdę chcesz, aby Twoja metoda zawierała się w ArrayList, po prostu ją dodaj:
ArrayList.metaClass.includes = { i -> i in delegate }
WAŻNE Gotcha do używania .contains () w kolekcji obiektów, takich jak domeny. Jeśli deklaracja domeny zawiera EqualsAndHashCode lub inną implementację equals () w celu określenia, czy te Ojbects są równe, i ustawiłeś to w ten sposób ...
import groovy.transform.EqualsAndHashCode
@EqualsAndHashCode(includes = "settingNameId, value")
następnie .contains (myObjectToCompareTo) oceni dane w myObjectToCompareTo z danymi dla każdej instancji Object w kolekcji. Tak więc, jeśli twoja metoda równych sobie nie pasuje do tabaki, tak jak moja nie, możesz zobaczyć nieoczekiwane rezultaty.
Możesz użyć operatora członkostwa:
def list = ['Grace','Rob','Emmy']
assert ('Emmy' in list)