2009-12-09 96 views
7
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) 是否时髦有任何内置的方法来检查这还是我有什么在上面的代码会做什么?如何检查如果列表包含一个子列表

回答

18

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

您必须使用String.tokenize()方法之前生成的字符串,而不是String.split()它返回一个字符串数组列表:

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 API集合:

assert list.containsAll(sublist) 
-2

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

+0

他没有或者问他的解决方案将工作没有,他问如果有任何内置的函数,他可以用它来代替。 – Gord 2009-12-09 21:03:06

+0

我不知道任何。 – Matthew 2009-12-10 00:32:52

7

最简单的方法是只需拨打:

list.containsAll(l) 

你可以在这里找到更多关于它的信息:Groovy Collections

相关问题