Hier können wir eine Scala Liste übernehmen haben:Wie können Sie 2 oder mehr Duplikate aus der Liste entfernen und ihre ursprüngliche Reihenfolge beibehalten?
val l1 = List(1, 2, 3, 1, 1, 3, 2, 5, 1)
Wir Duplikate leicht entfernen können mit dem folgenden Code:
l1.distinct
oder
l1.toSet.toList
Aber was, wenn wir Duplikate entfernen möchten nur wenn es mehr als 2 von ihnen gibt? Wenn also mehr als 2 Elemente mit demselben Wert vorhanden sind, bleiben wir nur zwei und entfernen den Rest von ihnen.
Ich konnte es mit folgenden Code erreichen:
l1.groupBy(identity).mapValues(_.take(2)).values.toList.flatten
, die mir das Ergebnis gab:
List(2, 2, 5, 1, 1, 3, 3)
Elemente entfernt werden, aber die Reihenfolge der übrigen Elemente unterscheidet sich von, wie diese Elemente erschienen in der erste Liste. Wie man diese Operation durchführt und die Reihenfolge von der ursprünglichen Liste bleibt?
So sollte das Ergebnis für l1 sein:
List(1, 2, 3, 1, 3, 2, 5)
Bevorzugen Sie Falten oder Rekursion? Wenn Sie den Status der bereits angezeigten Felder mit ihrer Nummer beibehalten, müssen Sie nur die Werte filtern, die bereits zu oft aufgetreten sind. –
Ich bevorzuge nicht Falten oder Rekursion. Wenn es viele verschiedene Antworten gibt, möchte ich sie sehen. – rtruszk