그루비 배열 / 해시 / 컬렉션 /리스트의 요소를 확인하는 방법은 무엇입니까?


127

배열에 요소가 포함되어 있는지 어떻게 알 수 있습니까? 로 [1, 2, 3].includes(1)평가 할만한 것이있을 것이라고 생각했습니다 true.


이 동일한 요소가 목록에서 어디에 있는지 색인을 찾을 수 있습니까?
Atharva Johri

2
@AtharvaJohriassert [12,42,33].indexOf(42) == 1
Riggs

답변:


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

245

일부 구문 설탕

1 in [1,2,3]

32
꼼꼼한. def m = [a: true]; 'a' in m→ 사실이지만 def m = [a: false]; 'a' in m→ 거짓!
Jesse Glick 17

55

목록을 보려면 다음을 사용하십시오 contains.

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

16
아마도 [1,2,3] .contains (1)라고 말하고 싶을 것입니다. 함수 자체가 포함되어 있다고 생각하기 때문에 이미 부울을 반환합니다. 왜 다시 하드 코딩 된 'true'와 비교하고 싶습니까?
Harshay Buradkar

6
@HarshayBuradkar true == true물론, 확실히 #joke
Automatico

8

ArrayList에 include 메소드를 정말로 원한다면 추가하십시오.

ArrayList.metaClass.includes = { i -> i in delegate }

3

중요 도메인과 같은 객체 컬렉션에서 .contains ()를 사용하는 데 어려움이 있습니다. Domain 선언에 EqualsAndHashCode 또는 다른 equals () 구현이 포함되어 해당 Ojbect가 동일한 지 여부를 판별하고 다음과 같이 설정 한 경우 ...

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

그런 다음 .contains (myObjectToCompareTo)는 Collection의 각 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.