查找列表中是否存在其他列表中的任何值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了查找列表中是否存在其他列表中的任何值相关的知识,希望对你有一定的参考价值。

我是groovy的新手,所以我有一个问题,我有两个列表,我想知道第一个列表中存在的值是否也存在于第二个列表中,并且它必须返回true或false。

我尝试做一个简短的测试,但它不起作用......这是我试过的:

// List 1
def modes = ["custom","not_specified","me2"]
// List 2
def modesConf = ["me1", "me2"]
// Bool
def test = false

test = modesConf.any { it =~ modes }
print test

但是如果我将第一个数组中“me2”的值更改为“mex2”,则它必须返回false时返回true

任何的想法?

答案

我相信你想:

// List 1
def modes = ["custom","not_specified","me2"]
// List 2
def modesConf = ["me1", "me2"]

def test = modesConf.any { modes.contains( it ) }
print test
另一答案

最简单的我能想到的是使用intersect并让Groovy真相开始。

def modes = ["custom","not_specified","me2"]
def modesConf = ["me1", "me2"]
def otherList = ["mex1"]

assert modesConf.intersect(modes) //["me2"]
assert !otherList.intersect(modes) //[]

assert modesConf.intersect(modes) == ["me2"]

如果断言通过,您可以在不进行第二次操作的情况下从交叉点中获取公共元素。 :)

另一答案

如果没有两个列表共有的项目,则此disjoint()方法返回true。听起来你想要否定:

def modes = ["custom","not_specified","me2"]
def modesConf = ["me1", "me2"]
assert modes.disjoint(modesConf) == false

modesConf = ["me1", "mex2"]
assert modes.disjoint(modesConf) == true
另一答案

您可以使用任何将返回true / false的disjoint()/ intersect()/ any({})。以下是给出的例子:

def list1=[1,2,3]

def list2=[3,4,5]
list1.disjoint(list2) // true means there is no common elements false means there is/are
list1.any{list2.contains(it)} //true means there are common elements

list1.intersect(list2) //[] empty list means there is no common element.
另一答案
def missingItem = modesConf.find { !modes.contains(it) }

assert missingFile == "me1"

在这种情况下,missingItem将包含一个缺少的元素,该元素存在于modesConf中但在模式中不存在。如果一切都很好,或者将为null。

以上是关于查找列表中是否存在其他列表中的任何值的主要内容,如果未能解决你的问题,请参考以下文章

尝试将列表中的电子邮件与其他列表匹配时无法创建常量值类型

查找映射是不是包含列表/可迭代项中的任何键的有效方法

使用python查找列表中是不是存在项目的变量

查找一个有序数列中的一个数是否存在的方法

Python,查找范围是否包含范围列表中的另一个较小范围

day4 递归二分法查找