Ok. Ich kenne. Dies ist eine Übung von Oderskys Kurs. Aber ich bin tagelang so dran.Alle Subsets erstellen
Methode definieren alle Teilmengen einer Eingabemenge zu erzeugen:
def combination(occ: List[(Char,Int)]) : List[List[(Char,Int)]]
Beispiel: für die Eingabe List(('a', 2), ('b', 2))
Ausgang erhalten:
List(
List(),
List(('a', 1)),
List(('a', 2)),
List(('b', 1)),
List(('a', 1), ('b', 1)),
List(('a', 2), ('b', 1)),
List(('b', 2)),
List(('a', 1), ('b', 2)),
List(('a', 2), ('b', 2))
)
Perfect. Für den Moment bekomme ich zwei verschiedene Dinge: alle Paare (1a) und Liste für einzelnes Element (1b)
1a Es funktioniert. es gibt mir alle Paare (Tupel allgemein)
def combinations(occurrences: List[(Char,Int)]) : List[List[(Char,Int)]] = {
if (occurrences.isEmpty) List(Nil)
else {
val entry = occurrences.head;
for (
first <- (entry._2 to 1 by -1).toList;
rest <- combinations(occurrences.tail))
yield (entry._1, first) :: rest
}
}
Ausgabe List(List((a,2), (b,2)), List((a,2), (b,1)), List((a,1), (b,2)), List((a,1), (b,1)))
1b. Es funktioniert, außer ich leere Liste nicht (natürlich auch ich nicht)
def combinations(occurrences: List[(Char,Int)]) : List[List[(Char,Int)]] = {
for (entry <- occurrences;
freq <- (entry._2 to 1 by -1).toList) yield List((entry._1,freq))
}
Ausgabe List(List((a,2)), List((a,1)), List((b,2)), List((b,1)))
Jetzt bin ich total fest, wie beide zu kombinieren. Könnten Sie mir bitte helfen zu verstehen, wie ich das erreichen kann?
Ich sage dir das nicht gerne, weil das Lesen solcher Sachen, wenn ich diese Klasse nehme, mich eine Wand hochtreiben würde, aber es kann in einer einzigen Aussage gemacht werden, dh kein '{}' benötigt nach dem '=' . Es ist eine ziemlich lange einzelne Anweisung (ich teile sie über 3 Zeilen auf) mit Rekursion, ein paar Elemente aus der Standardbibliothek und ein Aufruf einer anderen Methode in der Datei (Hinweis: es ist die nächste Methode in dieser Datei). Ich hoffe, das ist nicht schädlicher als hilfreich. Viel Glück. – jwvh
Um jeden Hinweis nur für Methoden der Standardbibliothek? –
Ich benutzte '::' und 'flatMap()' und entfernte Redundanzen mit 'distinct'. (Sag es niemandem, dem ich das gesagt habe.) – jwvh