ฉันจะทราบได้อย่างไรว่าอาร์เรย์มีองค์ประกอบหรือไม่ ผมคิดว่าอาจจะมีสิ่งที่ต้องการที่จะประเมินเป็น[1, 2, 3].includes(1)
true
assert [12,42,33].indexOf(42) == 1
ฉันจะทราบได้อย่างไรว่าอาร์เรย์มีองค์ประกอบหรือไม่ ผมคิดว่าอาจจะมีสิ่งที่ต้องการที่จะประเมินเป็น[1, 2, 3].includes(1)
true
assert [12,42,33].indexOf(42) == 1
คำตอบ:
.contains () เป็นวิธีที่ดีที่สุดสำหรับรายการ แต่สำหรับแผนที่คุณจะต้องใช้ .containsKey () หรือ .containsValue ()
[a:1,b:2,c:3].containsValue(3)
[a:1,b:2,c:3].containsKey('a')
if(aMap["aKey"]==aValue)
และในนอกจากนี้เพื่อตรวจสอบว่าแผนที่มีบางส่วนที่ไม่เป็นโมฆะค่าภายใต้คีย์บางอย่างมันก็เพียงพอที่จะตรวจสอบการแสดงออกดังต่อไปนี้
น้ำตาลไวยากรณ์บางชนิด
1 in [1,2,3]
def m = [a: true]; 'a' in m
→จริงยังdef m = [a: false]; 'a' in m
→เท็จ!
สำหรับรายการใช้contains
:
[1,2,3].contains(1) == true
true == true
แน่นอน #joke
หากคุณต้องการวิธีการรวมของคุณใน ArrayList จริงๆให้เพิ่ม:
ArrayList.metaClass.includes = { i -> i in delegate }
Gotcha ที่สำคัญสำหรับการใช้ .contains () บนคอลเล็กชันของออบเจ็กต์เช่นโดเมน หากการประกาศโดเมนมี EqualsAndHashCode หรือการใช้งาน equals () อื่น ๆ เพื่อพิจารณาว่า Ojbects เหล่านั้นเท่ากันหรือไม่และคุณได้ตั้งค่าไว้เช่นนี้ ...
import groovy.transform.EqualsAndHashCode
@EqualsAndHashCode(includes = "settingNameId, value")
จากนั้น .contains (myObjectToCompareTo) จะประเมินข้อมูลใน myObjectToCompareTo กับข้อมูลสำหรับอินสแตนซ์ Object แต่ละรายการใน Collection ดังนั้นหากวิธีการเท่ากับของคุณไม่ได้ขึ้นอยู่กับสิ่งที่ฉันไม่เคยเป็นคุณอาจเห็นผลลัพธ์ที่ไม่คาดคิด
def fruitBag = ["orange","banana","coconut"]
def fruit = fruitBag.collect{item -> item.contains('n')}
ฉันทำแบบนี้เพื่อให้ได้ผลถ้ามีคนกำลังมองหา
คุณสามารถใช้ตัวดำเนินการสมาชิก:
def list = ['Grace','Rob','Emmy']
assert ('Emmy' in list)
คุณยังสามารถใช้การจับคู่กับนิพจน์ทั่วไปเช่นนี้:
boolean bool = List.matches("(?i).*SOME STRING HERE.*")