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.
Sfida
MedioLeggi una singola riga di input: un elenco di coppie name:age separate da virgole.
Stampa tre righe:
- Nomi ordinati per età in ordine crescente, uniti con
,. In caso di parità, ordina alfabeticamente i nomi a pari merito. - Il nome della persona più anziana (usa
max(by:)). In caso di parità, vince quella che compare per prima. - 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
danProvalo 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
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Le stringhe in dettaglio
Conteggio e indiciMaiuscole, minuscole e rimozione degli spaziRicerca nelle stringheSuddivisione e unioneSostituzione di sottostringheRiepilogo - Verifica del nome utente4Insiemi
Creare insiemiUnione e intersezioneDifferenza e differenza simmetricaSottoinsieme e sovrainsiemeRiepilogo - Filtro per tag7Progetto - Tracciatore di abitudini
Panoramica del progettoSegna come completato10Progetto - Motore di quiz
Panoramica del progettoPorre domande2Intervalli e passi
Intervalli chiusi e semiapertiPassoMetodi degli intervalliIntervalli in switchRiepilogo - Griglia del calendario5Funzioni di ordine superiore Parte 1
MapFilterReduceConcatenare map, filter e reduceRiepilogo - Statistiche sulle parole3Dizionari
Dichiarare i dizionariRicerca facoltativaAggiornare i dizionariIterare sui dizionariRaggruppare i valoriRipasso - Inventario6Funzioni di ordine superiore Parte 2
compactMapflatMapsorted(by:)Creare pipelineRiepilogo - ClassificaEsercitati da solo: Playground Swift