2016-03-31 3 views
-4

Как заменить элемент списком и сгладить результат?scala найти все комбинации списка списков

пример:

заменить 3 с List (а, б)

вход: List(1, 2, 3, 4)

выход:

List(List(1, 2, a, 4) 
    List(1, 2, b, 4)) 

вход: List(1, 2, 3, 4, 3)

выход:

List(List(1, 2, a, 4, a) 
    List(1, 2, a, 4, b) 
    List(1, 2, b, 4, a) 
    List(1, 2, b, 4, b)) 
+0

Что вы пробовали до сих пор? Любые проблемы, с которыми мы можем вам помочь? Кстати, в ваших примерах результат не сплющивается, в то время как в попрошайничестве вашего вопроса вы говорите, что хотите, чтобы он был плоским. – Dima

+1

Замена 3 списком (a, b) приведет к списку (1,2, (a, b), 4) и сглаживанию, что приведет к списку (1,2, a, b, 4). То, что вы написали, совершенно другое. – slouc

ответ

0

Здесь:

def replacePermutations[A](l: Seq[A], replace: A, by: Seq[A]) = { 
  val byPermutationsWithRepetitions = 
    (by map (e => by.indices map (_ => e))) ++ by.permutations 

  byPermutationsWithRepetitions map { by => 
    val i = Iterator.from(0) 
    l map { e => 
      if (e == replace) by(i.next() % by.size) 
      else e 
    } 
  } 
} 

Приветствия

Смежные вопросы