1

任何人都可以建议一种有效的样式来对列表中的元素子集进行模式匹配吗

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
} 
4

3 回答 3

3

如果您可以在没有模式匹配的情况下生活,

可以通过检查子集中的每个元素是否包含在列表中来识别单个“列表中元素的子集”,如下所示:

if( List(3,1).forall( List(1,2,3,4,5,6).contains(_) ) ) println("do something")
于 2013-10-21T00:55:48.897 回答
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")
}
于 2013-10-21T00:16:02.380 回答
1

你的意思是这样的?:

def [X]containsSubset(li:List[X],li2:List[X]) =
  li2 match {
    case Nil => true
    case hd::_ =>  li.contains(hd) && containsSubset(li,tl)
  }
于 2013-10-20T23:50:02.573 回答