Избавьтесь от Итератора в Списке в Scala - PullRequest
0 голосов
/ 28 ноября 2018

Текущая ситуация: Я использую метод комбинаций для создания всех возможных комбинаций элементов списка.

//Input list
lf  : List[(Char, Int)] = List((a,2), (a,1), (b,2), (b,1))
//For loop
for (len <- (0 to lf.length).toList) yield {lf.combinations(len)}
//> res1: List[Iterator[List[(Char, Int)]]] = List(non-empty iterator, non-empty
//|  iterator, non-empty iterator, empty iterator, empty iterator)

комбинации возвращают Итератор [Список [A]]

Что мне нужно

  1. Элемент списка List[List[(Char, Int)]]
  2. Игнорировать пустой итератор

Как я могу избавиться от Итератора?

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Получить все combinations(), от отдельных элементов до полных List, за List.

lf.indices.flatMap(x => lf.combinations(x+1)).toList
//res0: List[List[(Char, Int)]] = List(
//   List((a,2)), List((a,1)), List((b,2)), List((b,1))
// , List((a,2), (a,1)), List((a,2), (b,2)), List((a,2), (b,1)), List((a,1), (b,2)), List((a,1), (b,1)), List((b,2), (b,1))
// , List((a,2), (a,1), (b,2)), List((a,2), (a,1), (b,1)), List((a,2), (b,2), (b,1)), List((a,1), (b,2), (b,1))
// , List((a,2), (a,1), (b,2), (b,1)))
0 голосов
/ 28 ноября 2018

Вы можете использовать .toList

val lf  : List[(Char, Int)] = List(('a',2), ('a',1), ('b',2), ('b',1))

for (len <- (0 to lf.length).toList) yield {lf.combinations(len)}.filter(_.length > 0).toList
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...