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有没有内置的方法来检查这个或我在上面的代码中会有什么用?
答案 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)
答案 2 :(得分:-2)
您的解决方案将有效。如果你正在处理相对较少的离散值的大数组,请务必考虑Knuth–Morris–Pratt algorithm。