【发布时间】:2010-09-08 07:00:36
【问题描述】:
如何判断数组是否包含元素?
我认为可能有类似[1, 2, 3].includes(1) 的东西会评估为true。
【问题讨论】:
-
你能找到这个相等元素在列表中的索引吗?
-
@AtharvaJohri
assert [12,42,33].indexOf(42) == 1
如何判断数组是否包含元素?
我认为可能有类似[1, 2, 3].includes(1) 的东西会评估为true。
【问题讨论】:
assert [12,42,33].indexOf(42) == 1
一些语法糖
1 in [1,2,3]
【讨论】:
def m = [a: true]; 'a' in m → 是真的 def m = [a: false]; 'a' in m → 是假的!
!(1 in [1,2,3])
.contains() 是列表的最佳方法,但对于地图,您需要使用 .containsKey() 或 .containsValue()
[a:1,b:2,c:3].containsValue(3)
[a:1,b:2,c:3].containsKey('a')
【讨论】:
if(aMap["aKey"]==aValue)就足够了。
对于列表,使用contains:
[1,2,3].contains(1) == true
【讨论】:
true == true,当然是#joke
如果你真的想在 ArrayList 上包含方法,只需添加它:
ArrayList.metaClass.includes = { i -> i in delegate }
【讨论】:
您可以使用 Membership 运算符:
def list = ['Grace','Rob','Emmy']
assert ('Emmy' in list)
【讨论】:
在对象集合(例如域)上使用 .contains() 的重要问题。如果域声明包含 EqualsAndHashCode 或其他一些 equals() 实现来确定这些对象是否相等,并且您已将其设置为...
import groovy.transform.EqualsAndHashCode
@EqualsAndHashCode(includes = "settingNameId, value")
然后 .contains(myObjectToCompareTo) 将使用集合中每个 Object 实例的数据评估 myObjectToCompareTo 中的数据。因此,如果您的 equals 方法不符合标准,而我的方法不符合标准,您可能会看到意想不到的结果。
【讨论】:
def fruitBag = ["orange","banana","coconut"]
def fruit = fruitBag.collect{item -> item.contains('n')}
我是这样做的,所以如果有人在寻找它,它就可以工作。
【讨论】:
你也可以像这样使用正则表达式匹配:
boolean bool = List.matches("(?i).*SOME STRING HERE.*")
【讨论】: