Come faccio a capire se un array contiene un elemento? Ho pensato che potrebbe esserci qualcosa del genere [1, 2, 3].includes(1)
che valuterebbe come true
.
assert [12,42,33].indexOf(42) == 1
Come faccio a capire se un array contiene un elemento? Ho pensato che potrebbe esserci qualcosa del genere [1, 2, 3].includes(1)
che valuterebbe come true
.
assert [12,42,33].indexOf(42) == 1
Risposte:
.contains () è il metodo migliore per gli elenchi, ma per le mappe dovrai usare .containsKey () o .containsValue ()
[a:1,b:2,c:3].containsValue(3)
[a:1,b:2,c:3].containsKey('a')
if(aMap["aKey"]==aValue)
.
Qualche zucchero di sintassi
1 in [1,2,3]
def m = [a: true]; 'a' in m
→ ancora vero def m = [a: false]; 'a' in m
→ falso!
Per gli elenchi, utilizzare contains
:
[1,2,3].contains(1) == true
true == true
, ovviamente #joke
Se vuoi davvero il tuo metodo include su un ArrayList, basta aggiungerlo:
ArrayList.metaClass.includes = { i -> i in delegate }
IMPORTANTE Gotcha per l'utilizzo di .contains () su una raccolta di oggetti, ad esempio domini. Se la dichiarazione del dominio contiene un EqualsAndHashCode o qualche altra implementazione equals () per determinare se quegli Ojbect sono uguali e l'hai impostato in questo modo ...
import groovy.transform.EqualsAndHashCode
@EqualsAndHashCode(includes = "settingNameId, value")
quindi .contains (myObjectToCompareTo) valuterà i dati in myObjectToCompareTo con i dati per ciascuna istanza di oggetto nella raccolta. Quindi, se il tuo metodo uguale non è all'altezza, come il mio no, potresti vedere risultati inaspettati.
È possibile utilizzare l'operatore di appartenenza:
def list = ['Grace','Rob','Emmy']
assert ('Emmy' in list)