2013-10-20 154 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

編輯我的答案。問題似乎表明存在兩個問題:如何識別子集以及如何模式匹配多個子集。希望我的回答有助於:) –