匹配列表列表中的单个元素

时间:2011-11-16 03:17:17

标签: scala

如果我有列表[任何] 这样的表格列表

  

val list = List(List(1,1),2,List(3,List(5,8)))

然后如何编写区分

的匹配语句
  1. 任何非列表类型的单个元素(即 2 从上面开始)
  2. 作为列表的元素(即列表(1,1)列表(3,列表(5,8)从上面开始)
  3. 或伪scala

    list match {
      case x:"single non-list element" => // do something with single element x
      case y:"where y is a list"       => // do something with list y
    }
    

    通常的 head :: tails 匹配不起作用,因为 head 可以是任何类型,其中包含其他列表。

2 个答案:

答案 0 :(得分:5)

list foreach { 
  _ match {
    case x:List[_] => // list
    case _ => // anything else
  }
}

我应该工作

答案 1 :(得分:5)

val (lists, nonlists) = list partition {case (x :: xs) => true case _ => false}

lists: List[Any] = List(List(1, 1), List(3, List(5, 8)))
nonlists: List[Any] = List(2)