2016-03-31 11 views
-4

Wie ersetze ich einen Gegenstand durch eine Liste und glätte das Ergebnis?scala finde alle Kombinationen einer Liste von Listen

Beispiel:

ersetzen 3 mit List (a, b)

input: List(1, 2, 3, 4)

output:

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

input: List(1, 2, 3, 4, 3)

output:

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

Was Sie bisher versucht haben? Irgendwelche Probleme, mit denen wir Ihnen helfen können? BTW, in Ihren Beispielen, ist das Ergebnis nicht abgeflacht, während Sie im Bett Ihrer Frage sagen, dass Sie es flach wollen. – Dima

+1

Das Ersetzen von 3 durch die Liste (a, b) würde zu List (1,2, (a, b), 4) und zum Reduzieren führen, was zu List (1,2, a, b, 4) führen würde. Was du geschrieben hast, ist etwas völlig anderes. – slouc

Antwort

0

Hier ist sie:

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

Prost

Verwandte Themen