【问题标题】: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

标签: arrays list groovy


【解决方案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.collect{item -> item.contains('n')}
        

        我是这样做的,所以如果有人在寻找它,它就可以工作。

        【讨论】:

          【解决方案8】:

          你也可以像这样使用正则表达式匹配:

          boolean bool = List.matches("(?i).*SOME STRING HERE.*")
          

          【讨论】:

            猜你喜欢
            • 2019-07-14
            • 1970-01-01
            • 2019-07-27
            • 1970-01-01
            • 1970-01-01
            • 2017-04-13
            • 1970-01-01
            • 1970-01-01
            • 2012-07-24
            相关资源
            最近更新 更多