Соответствовать одному элементу в списке списков - PullRequest
2 голосов
/ 16 ноября 2011

Если у меня есть список вида Список [Любой] как этот

val list = Список (Список (1, 1), 2, Список (3, Список (5, 8)))

как мне написать оператор совпадения, который различает

  1. Отдельный элемент любого типа, не входящего в список (т. Е. 2 сверху)
  2. Элементы, являющиеся списками (т.е. Список (1,1) и Список (3, Список (5, 8) сверху)

или в псевдо-скале

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 ]

5 голосов
/ 16 ноября 2011
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)
5 голосов
/ 16 ноября 2011
list foreach { 
  _ match {
    case x:List[_] => // list
    case _ => // anything else
  }
}

должно работать, я думаю

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...