如何检查列表是否包含子列表

时间:2009-12-09 03:14:52

标签: groovy

def l = ["My", "Homer"]
String s = "Hi My Name is Homer"

def list = s.split(" ")
println list

list.each{it ->
    l.each{it1 ->
        if (it == it1)
            println "found ${it}"
    }
}

我想检查大列表(list)是否包含子列表的所有元素(l) groovy有没有内置的方法来检查这个或我在上面的代码中会有什么用?

3 个答案:

答案 0 :(得分:24)

您可以使用Groovy的Collection.intersect(Collection right)方法并检查返回的Collection是否与作为参数传递的Collection一样大。

您必须先使用String.tokenize()方法从String生成List而不是String.split(),它返回一个String数组:

def sublist = ["My", "Homer"]
def list = "Hi My Name is Homer".tokenize()

assert sublist.size() == list.intersect(sublist).size()

或者,您可以使用Groovy的Object.every(Closure closure)方法并检查子列表中的每个元素是否包含在列表中:

assert sublist.every { list.contains(it) }

但是,最短的方法是使用标准的Java Collection API:

assert list.containsAll(sublist)

答案 1 :(得分:7)

最简单的方法就是致电:

list.containsAll(l)

您可以在此处找到有关它的更多信息:Groovy Collections

答案 2 :(得分:-2)

您的解决方案将有效。如果你正在处理相对较少的离散值的大数组,请务必考虑Knuth–Morris–Pratt algorithm