Werte gruppieren
Teil des Abschnitts Logik & Kontrollfluss der Swift-Journey von Coddy — Lektion 16 von 56.
Das default-subscript-Muster ist die Grundlage für zwei alltägliche Formen.
Häufigkeitszähler: Zählen Sie, wie oft jeder Schlüssel vorkommt.
let letters = ["a", "b", "a", "c", "a"]
var counts: [String: Int] = [:]
for letter in letters {
counts[letter, default: 0] += 1
}
// counts == ["a": 3, "b": 1, "c": 1]Bucketing: Werte unter einem abgeleiteten Schlüssel sammeln:
let words = ["hi", "hello", "yo", "hey"]
var byLength: [Int: [String]] = [:]
for w in words {
byLength[w.count, default: []].append(w)
}
// [2: ["hi", "yo"], 5: ["hello"], 3: ["hey"]]Der Standardwert für den Bucketing-Fall ist ein leeres Array. Der default:-Wert wird nur verwendet, wenn der Schlüssel fehlt, dann mutiert die rechte Seite den Eintrag an Ort und Stelle.
Aufgabe
MittelLies eine einzelne Eingabezeile: eine durch Kommas getrennte Liste von Wörtern.
Gib in dieser Reihenfolge Folgendes aus:
- Eine Zeile pro Wortlänge, die in der Eingabe vorkommt, sortiert von der kürzesten zur längsten, im Format
<length>: <count>, wobeicountangibt, wie viele Wörter dieser Länge vorkamen Most common length: <n>, wobeindie Länge mit der höchsten Anzahl ist. Löse Gleichstände auf, indem du die kürzere Länge wählst.
Für die Eingabe hi,hello,yo,hey,bonjour,bye ist die Ausgabe:
2: 2
3: 2
5: 1
7: 1
Most common length: 2(Die Längen 2 und 3 kommen beide zweimal vor. Der Gleichstand wird durch die kürzere Länge aufgelöst, also gewinnt 2.)
Spickzettel
Häufigkeitszähler – zählen Sie das Vorkommen jedes Schlüssels mit default: 0:
var counts: [String: Int] = [:]
for letter in letters {
counts[letter, default: 0] += 1
}Bucketing – gruppieren Sie Werte unter einem abgeleiteten Schlüssel mit default: []:
var byLength: [Int: [String]] = [:]
for w in words {
byLength[w.count, default: []].append(w)
}Der default:-Wert wird nur verwendet, wenn der Schlüssel fehlt; das Ergebnis wird dann direkt verändert.
Probier es selbst
let words = readLine()!.components(separatedBy: ",")
// TODO: Wörter pro Länge zählen; sortiert ausgeben; häufigstes ausgeben (bei Gleichstand: kürzeres)
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Kontrollfluss
1Strings im Detail
Zählen und IndizesGroß-/Kleinschreibung und TrimmenSuchen in StringsTeilen und ZusammenfügenTeilstrings ersetzenWiederholung – Benutzernamen-Check4Mengen
Mengen erstellenVereinigung und SchnittmengeDifferenz und symmetrische DifferenzTeilmenge und ObermengeRückblick – Tag-Filter7Projekt - Habit Tracker
ProjektübersichtAls erledigt markieren2Bereiche & Schrittweiten
Geschlossen vs. halboffenSchrittweiteRange-MethodenRanges in SwitchRückblick – Kalender-Grid5Funktionen höherer Ordnung Teil 1
MapFilterReduceVerkettung von map, filter, reduceRückblick – Wortstatistiken3Dictionaries
Dictionaries deklarierenOptionaler LookupDictionaries aktualisierenÜber Dictionaries iterierenWerte gruppierenZusammenfassung – Inventar6Funktionen höherer Ordnung Teil 2
compactMapflatMapsorted(by:)Pipelines erstellenZusammenfassung – Bestenliste