Menu
Coddy logo textTech

sorted(by:)

Fa parte della sezione Logica e flusso del percorso Swift di Coddy. Lezione 30 di 56.

Hai usato .sorted() sugli array di valori Comparable, come numeri o stringhe. Quando vuoi ordinare in base a qualcos'altro, fornisci una closure che accetta due elementi e restituisce true quando il primo deve precedere il secondo.

let words = ["banana", "hi", "hello"]
let byLength = words.sorted { $0.count < $1.count }
print(byLength)              // ["hi", "hello", "banana"]

Per l'ordine decrescente, inverti il confronto:

let down = words.sorted { $0.count > $1.count }
print(down)                  // ["banana", "hello", "hi"]

La chiusura può confrontare qualsiasi valore derivato, la lunghezza, l'ultima lettera, una voce in un hash. Qualunque cosa confronti la chiusura determina l'ordinamento.

min(by:) e max(by:) funzionano allo stesso modo, ma restituiscono un singolo elemento opzionale anziché una copia ordinata.

challenge icon

Sfida

Medio

Leggi una singola riga di input: un elenco di coppie name:age separate da virgole.

Stampa tre righe:

  1. Nomi ordinati per età in ordine crescente, uniti con ,. In caso di parità, ordina alfabeticamente i nomi a pari merito.
  2. Il nome della persona più anziana (usa max(by:)). In caso di parità, vince quella che compare per prima.
  3. Il nome della persona più giovane (usa min(by:)). In caso di parità, vince quella che compare per prima.

Per l'input alice:30,bob:22,cara:30,dan:18, l'output è:

dan,bob,alice,cara
alice
dan

Provalo tu

let people = readLine()!.components(separatedBy: ",").map { pair -> (String, Int) in
    let parts = pair.components(separatedBy: ":")
    return (parts[0], Int(parts[1])!)
}

// TODO: ordina per età crescente (in caso di parità, per nome); max(by:) per la persona più anziana; min(by:) per la più giovane
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Playground Swift