Bearbeiten: Die Tatsache hinzugefügt, dass die Liste sortiert ist, und Realisierung von "duplizieren" ist irreführend, ersetzt das mit "redundant" im Titel.Entfernen redundante Einträge, scala Weg
Ich habe eine sortierte Liste von Einträgen, die einen Produktionswert in einem bestimmten Intervall angeben. Einträge, die zu einem späteren Zeitpunkt den exakt gleichen Wert angeben, fügen keine Informationen hinzu und können sicher weggelassen werden.
case class Entry(minute:Int, production:Double)
val entries = List(Entry(0, 100.0), Entry(5, 100.0), Entry(10, 100.0), Entry(20, 120.0), Entry(30, 100.0), Entry(180, 0.0))
Experimentieren mit den scala 2.8 Sammelfunktionen, so weit ich habe diese Arbeit Umsetzung:
entries.foldRight(List[Entry]()) {
(entry, list) => list match {
case head :: tail if (entry.production == head.production) => entry :: tail
case head :: tail => entry :: list
case List() => entry :: List()
}
}
res0: List[Entry] = List(Entry(0,100.0), Entry(20,120.0), Entry(30,100.0), Entry(180,0.0))
Fragen oder Anregungen? Verpasse ich etwas Scala-Magie?
Wohlgemerkt, 'foldRight' ist mit' List' suboptimal. Bevorzugen Sie "foldLeft" damit.Dies ist das Gegenteil von 'Haskell', wobei' Right' wegen Nicht-Strenge gegenüber 'Left' bevorzugt wird. –
ok, aber dann muss ich das Ergebnis umkehren. Einen schnellen Test durchzuführen, bringt foldRight leicht vor foldLeft + reverse, also würde ich sagen, dass foldRight klarer ist. – andersbohn