2017-09-22 1 views
1

Ich habe zwei Listen:Nicht Wiederholung unterschiedliche Paarkombinationen aus zwei scala Listen

val l1 = List(1,2,3) 

val l2 = List(1,2,4,5) 

diese beiden Listen Kombination, wie erhalte ich folgendes Ergebnis?

List((1,1), (1,2), (1,4), (1,5), (2,2), (2,4), (2,5), (3,1), (3,2), (3,4), (3,5)) 

Beachten Sie, dass nur einer von (2,1) oder (1,2) ausgewählt wird. Reihenfolge der Paare spielt keine Rolle. Wie berechne ich die Ausgabe effizient, da die beiden Eingabelisten groß sind?

Vielen Dank im Voraus.

+0

Weitere detaillierte Informationen hinzugefügt, hoffe es kann Ihnen helfen. Überlegen Sie, ob Sie die Antwort akzeptieren möchten (indem Sie auf das Häkchen klicken), wenn dies zur Lösung Ihres Problems beigetragen hat. – Shaido

+0

Danke @Shaido. :) Deine Antwort hat geholfen! Entschuldigung für die verspätete Antwort. – accssharma

Antwort

3

Wenn die endgültige Reihenfolge überhaupt keine Rolle spielt, können Sie eine Set verwenden, die automatisch alle Duplikate entfernt. In diesem Fall ist es notwendig, sicherzustellen, dass die Werte in allen Tupeln der gleichen Reihenfolge folgen. Stellen Sie beispielsweise sicher, dass die Werte in den Tupeln immer in einer aufsteigenden Reihenfolge sind. Arbeitsbeispiel:

val l1 = List(1,2,3).toSet // Convert one of the lists to a Set 
val l2 = List(1,2,4,5) 

val set = for { 
    x <- l1 
    y <- l2 
    z = if (x<y) (x,y) else (y,x) 
} yield z 

Dies wird Ihnen ein Set enthält die angeforderten Tupel. Die erste Liste wird vor dem Verständnis in eine Set umgewandelt, dies macht das Endergebnis auch zu einer Set. Dieselbe Logik kann auch mit map und filter geschrieben werden, wenn dies bevorzugt ist.


Alternativ können Sie verwenden breakOut (sehr gut erklärt in der Antwort here).

import scala.collection.breakOut 
val set: Set[(Int, Int)] = 
    (for { 
    x <- l1 
    y <- l2 
    z = if (x<y) (x,y) else (y,x) 
    } yield z) (breakOut) 

Dies führt zu den gleichen Ergebnissen, aber Sie müssen keine Ihrer Listen vor dem Verständnis konvertieren.

Verwandte Themen