如何检查常规数组/哈希/集合/列表中的元素?
Posted
技术标签:
【中文标题】如何检查常规数组/哈希/集合/列表中的元素?【英文标题】:How to check if element in groovy array/hash/collection/list? 【发布时间】:2010-09-08 07:00:36 【问题描述】:如何判断数组是否包含元素?
我认为可能有类似[1, 2, 3].includes(1)
的东西会评估为true
。
【问题讨论】:
你能找到这个相等元素在列表中的索引吗? @AtharvaJohriassert [12,42,33].indexOf(42) == 1
【参考方案1】:
一些语法糖
1 in [1,2,3]
【讨论】:
小心。def m = [a: true]; 'a' in m
→ 是真的 def m = [a: false]; 'a' in m
→ 是假的!
你如何否定这个?
@BigMcLargeHuge !(1 in [1,2,3])
【参考方案2】:
.contains() 是列表的最佳方法,但对于地图,您需要使用 .containsKey() 或 .containsValue()
[a:1,b:2,c:3].containsValue(3)
[a:1,b:2,c:3].containsKey('a')
【讨论】:
另外,要检查一个map是否在某个key下包含一些非空值,检查下面的表达式if(aMap["aKey"]==aValue)
就足够了。【参考方案3】:
对于列表,使用contains
:
[1,2,3].contains(1) == true
【讨论】:
可能你想说的是 [1,2,3].contains(1)。因为我猜 contains 函数本身已经返回一个布尔值。为什么要再次将其与硬编码的“真”进行比较。 @HarshayBuradkar 为了确定true == true
,当然是#joke【参考方案4】:
如果你真的想在 ArrayList 上包含方法,只需添加它:
ArrayList.metaClass.includes = i -> i in delegate
【讨论】:
【参考方案5】:您可以使用 Membership 运算符:
def list = ['Grace','Rob','Emmy']
assert ('Emmy' in list)
Membership operator Groovy
【讨论】:
【参考方案6】:在对象集合(例如域)上使用 .contains() 的重要问题。如果域声明包含 EqualsAndHashCode 或其他一些 equals() 实现来确定这些对象是否相等,并且您已将其设置为...
import groovy.transform.EqualsAndHashCode
@EqualsAndHashCode(includes = "settingNameId, value")
然后 .contains(myObjectToCompareTo) 将使用集合中每个 Object 实例的数据评估 myObjectToCompareTo 中的数据。因此,如果您的 equals 方法不符合标准,而我的方法不符合标准,您可能会看到意想不到的结果。
【讨论】:
【参考方案7】:def fruitBag = ["orange","banana","coconut"]
def fruit = fruitBag.collectitem -> item.contains('n')
我是这样做的,所以如果有人在寻找它,它就可以工作。
【讨论】:
【参考方案8】:你也可以像这样使用正则表达式匹配:
boolean bool = List.matches("(?i).*SOME STRING HERE.*")
【讨论】:
以上是关于如何检查常规数组/哈希/集合/列表中的元素?的主要内容,如果未能解决你的问题,请参考以下文章