Grupowanie wartości
Część sekcji Logika i przepływ programu ścieżki Swift w Coddy. Lekcja 16 z 56.
Wzorzec domyślnego indeksu dolnego jest podstawą dwóch często spotykanych kształtów.
Licznik częstotliwości: zlicz, ile razy pojawia się każdy klucz.
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]Grupowanie w kubełki: zbieraj wartości według wyprowadzonego klucza:
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"]]Domyślną wartością w przypadku grupowania jest pusta tablica. Wartość default: jest używana tylko wtedy, gdy brakuje klucza, a następnie prawa strona modyfikuje wpis w miejscu.
Wyzwanie
ŚredniWczytaj jeden wiersz wejścia: listę słów rozdzielonych przecinkami.
Wypisz w tej kolejności:
- Jeden wiersz dla każdej długości słowa występującej na wejściu, posortowanej od najkrótszej do najdłuższej, w formacie
<length>: <count>, gdziecountoznacza liczbę słów o tej długości Most common length: <n>, gdziento długość o największej liczbie wystąpień. W przypadku remisu wybierz krótszą długość.
Dla wejścia hi,hello,yo,hey,bonjour,bye wynikiem jest:
2: 2
3: 2
5: 1
7: 1
Most common length: 2(Długości 2 i 3 występują po dwa razy. Remis rozstrzyga krótsza długość, więc wygrywa 2.)
Spróbuj swoich sił
let words = readLine()!.components(separatedBy: ",")
// TODO: policz słowa według długości; wypisz posortowane; wypisz najczęściej występującą długość (przy remisie: krótsza)
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ programu
1Dogłębnie o ciągach znaków
Liczba i indeksyWielkość liter i usuwanie białych znakówWyszukiwanie w ciągach znakówDzielenie i łączenieZastępowanie podciągówPodsumowanie — sprawdzanie nazwy użytkownika4Zbiory
Tworzenie zbiorówSuma i część wspólnaRóżnica i różnica symetrycznaPodzbiór i nadzbiórPowtórka — filtr tagów7Projekt – Śledzenie nawyków
Przegląd projektuOznacz jako wykonane10Projekt — silnik quizów
Przegląd projektuZadawanie pytań2Zakresy i kroki
Zakresy domknięte i półotwarteKrokMetody zakresówZakresy w instrukcji switchPowtórka — siatka kalendarza5Funkcje wyższego rzędu, część 1
MapFilterReduceŁączenie map, filter i reducePodsumowanie – statystyki słów3Słowniki
Deklarowanie słownikówWyszukiwanie opcjonalneAktualizowanie słownikówIterowanie po słownikachGrupowanie wartościPodsumowanie – inwentarz6Funkcje wyższego rzędu, cz. 2
compactMapflatMapsorted(by:)Tworzenie potokówPowtórzenie – tabela wynikówPoćwicz samodzielnie: Edytor online Swift