2013-10-20 120 views
1

任何人都可以建议对元素的列表中的一个子集的高效的作风模式匹配Scala的模式匹配

containsSlice预计秩序,不与无序比较列表

工作

这就是我要找(不准确的语法表示驱动点)

List(1,2,3,4,5,6) match { 
case x if x.contains(List(1,3)) => do something 
case x if x.contains(List(2)) => else 
case _ => do something else else 
} 
+0

接受答案? –

回答

1
List(1, 2, 3, 4, 5, 6).toSet match { 
    case x if Set(1, 3).subsetOf(x) => println("do something") 
    case x if Set(2).subsetOf(x) => println("something else") 
    case _ => println("another thing") 
} 
1

你的意思是这样的吗? :

def [X]containsSubset(li:List[X],li2:List[X]) = 
    li2 match { 
    case Nil => true 
    case hd::_ => li.contains(hd) && containsSubset(li,tl) 
    } 
3

如果你生活中可以没有模式匹配,

单“列表中元素的子集”可以通过,如果在子集中的每个元素包含在检查确定列表如下:

if(List(3,1).forall(List(1,2,3,4,5,6).contains(_))) println("do something") 
+0

如果你解释你的代码在做什么以及为什么这是一种改进,你的回答会更好。 – alroc

+0

编辑我的答案。问题似乎表明存在两个问题:如何识别子集以及如何模式匹配多个子集。希望我的回答有助于:) –