如何检查常规数组/哈希/集合/列表中的元素?

Posted

技术标签:

【中文标题】如何检查常规数组/哈希/集合/列表中的元素?【英文标题】:How to check if element in groovy array/hash/collection/list? 【发布时间】:2010-09-08 07:00:36 【问题描述】:

如何判断数组是否包含元素? 我认为可能有类似[1, 2, 3].includes(1) 的东西会评估为true

【问题讨论】:

你能找到这个相等元素在列表中的索引吗? @AtharvaJohri assert [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.*")

【讨论】:

以上是关于如何检查常规数组/哈希/集合/列表中的元素?的主要内容,如果未能解决你的问题,请参考以下文章

在 Presto 中,如何检查我通过子查询获取的列表中是不是存在数组中的元素

漫画 | 什么是散列表(哈希表)?

Scala如何将集合中的元素放入数组函数中

有关java中的hashCode问题

检查元素是不是属于集合的算法

java中哈希表及其应用详解