Comment déterminer si un tableau contient un élément? J'ai pensé qu'il pourrait y avoir quelque chose comme [1, 2, 3].includes(1)
qui évaluerait comme true
.
assert [12,42,33].indexOf(42) == 1
Comment déterminer si un tableau contient un élément? J'ai pensé qu'il pourrait y avoir quelque chose comme [1, 2, 3].includes(1)
qui évaluerait comme true
.
assert [12,42,33].indexOf(42) == 1
Réponses:
.contains () est la meilleure méthode pour les listes, mais pour les cartes, vous devrez utiliser .containsKey () ou .containsValue ()
[a:1,b:2,c:3].containsValue(3)
[a:1,b:2,c:3].containsKey('a')
if(aMap["aKey"]==aValue)
.
Un peu de sucre de syntaxe
1 in [1,2,3]
def m = [a: true]; 'a' in m
→ vrai encore def m = [a: false]; 'a' in m
→ faux!
Pour les listes, utilisez contains
:
[1,2,3].contains(1) == true
true == true
, bien sûr #joke
Si vous voulez vraiment votre méthode includes sur une ArrayList, ajoutez-la simplement:
ArrayList.metaClass.includes = { i -> i in delegate }
IMPORTANT Gotcha pour utiliser .contains () sur une collection d'objets, tels que les domaines. Si la déclaration de domaine contient un EqualsAndHashCode, ou une autre implémentation equals () pour déterminer si ces Ojbects sont égaux, et que vous l'avez défini comme ceci ...
import groovy.transform.EqualsAndHashCode
@EqualsAndHashCode(includes = "settingNameId, value")
puis le .contains (myObjectToCompareTo) évaluera les données de myObjectToCompareTo avec les données de chaque instance Object de la collection. Donc, si votre méthode d'égalité n'est pas à la hauteur, comme la mienne ne l'était pas, vous pourriez voir des résultats inattendus.
Vous pouvez utiliser l'opérateur Membership:
def list = ['Grace','Rob','Emmy']
assert ('Emmy' in list)