วิธีตรวจสอบว่าองค์ประกอบในอาร์เรย์ groovy / hash / collection / list หรือไม่


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')

if(aMap["aKey"]==aValue)และในนอกจากนี้เพื่อตรวจสอบว่าแผนที่มีบางส่วนที่ไม่เป็นโมฆะค่าภายใต้คีย์บางอย่างมันก็เพียงพอที่จะตรวจสอบการแสดงออกดังต่อไปนี้
Naeel Maqsudov

246

น้ำตาลไวยากรณ์บางชนิด

1 in [1,2,3]

32
ระมัดระวัง def m = [a: true]; 'a' in m→จริงยังdef m = [a: false]; 'a' in m→เท็จ!
Jesse Glick

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 จริงๆให้เพิ่ม:

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

3

Gotcha ที่สำคัญสำหรับการใช้ .contains () บนคอลเล็กชันของออบเจ็กต์เช่นโดเมน หากการประกาศโดเมนมี EqualsAndHashCode หรือการใช้งาน equals () อื่น ๆ เพื่อพิจารณาว่า Ojbects เหล่านั้นเท่ากันหรือไม่และคุณได้ตั้งค่าไว้เช่นนี้ ...

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

จากนั้น .contains (myObjectToCompareTo) จะประเมินข้อมูลใน myObjectToCompareTo กับข้อมูลสำหรับอินสแตนซ์ Object แต่ละรายการใน Collection ดังนั้นหากวิธีการเท่ากับของคุณไม่ได้ขึ้นอยู่กับสิ่งที่ฉันไม่เคยเป็นคุณอาจเห็นผลลัพธ์ที่ไม่คาดคิด


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.