sorted(by:)
Część sekcji Logika i przepływ programu ścieżki Swift w Coddy. Lekcja 30 z 56.
Używałeś .sorted() na tablicach wartości typu Comparable, takich jak liczby lub ciągi znaków. Gdy chcesz sortować według czegoś innego, przekaż domknięcie, które przyjmuje dwa elementy i zwraca true, gdy pierwszy powinien znaleźć się przed drugim.
let words = ["banana", "hi", "hello"]
let byLength = words.sorted { $0.count < $1.count }
print(byLength) // ["hi", "hello", "banana"]Aby uzyskać kolejność malejącą, zamień porównanie:
let down = words.sorted { $0.count > $1.count }
print(down) // ["banana", "hello", "hi"]Domknięcie może porównywać dowolną wartość pochodną: długość, ostatnią literę, wpis w tablicy haszującej. To, co porównuje domknięcie, decyduje o sortowaniu.
min(by:) i max(by:) działają tak samo, ale zwracają pojedynczy element opcjonalny zamiast posortowanej kopii.
Wyzwanie
ŚredniOdczytaj jeden wiersz danych wejściowych: listę par name:age rozdzielonych przecinkami.
Wypisz trzy wiersze:
- Imiona i nazwiska posortowane według wieku rosnąco, połączone za pomocą
,. W przypadku remisu posortuj osoby z tym samym wiekiem alfabetycznie według imion i nazwisk. - Imię i nazwisko najstarszej osoby (użyj
max(by:)). W przypadku remisu wygrywa osoba, która pojawia się jako pierwsza. - Imię i nazwisko najmłodszej osoby (użyj
min(by:)). W przypadku remisu wygrywa osoba, która pojawia się jako pierwsza.
Dla danych wejściowych alice:30,bob:22,cara:30,dan:18 wynikiem jest:
dan,bob,alice,cara
alice
danSpróbuj swoich sił
let people = readLine()!.components(separatedBy: ",").map { pair -> (String, Int) in
let parts = pair.components(separatedBy: ":")
return (parts[0], Int(parts[1])!)
}
// TODO: posortuj według wieku rosnąco (przy remisie według imienia); max(by:) dla najstarszej osoby; min(by:) dla najmłodszej osoby
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