Menu
Coddy logo textTech

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.

challenge icon

Wyzwanie

Średni

Odczytaj jeden wiersz danych wejściowych: listę par name:age rozdzielonych przecinkami.

Wypisz trzy wiersze:

  1. 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.
  2. Imię i nazwisko najstarszej osoby (użyj max(by:)). W przypadku remisu wygrywa osoba, która pojawia się jako pierwsza.
  3. 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
dan

Spró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
quiz iconSprawdź się

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

Poćwicz samodzielnie: Edytor online Swift