sorted(by:)
Termasuk bagian Logika dan Alur dalam perjalanan Swift di Coddy. Pelajaran 30 dari 56.
Kamu sudah menggunakan .sorted() pada array berisi nilai Comparable, seperti angka atau string. Jika kamu ingin mengurutkan berdasarkan hal lain, berikan closure yang menerima dua elemen dan mengembalikan true saat elemen pertama harus berada sebelum elemen kedua.
let words = ["banana", "hi", "hello"]
let byLength = words.sorted { $0.count < $1.count }
print(byLength) // ["hi", "hello", "banana"]Untuk urutan menurun, tukar perbandingannya:
let down = words.sorted { $0.count > $1.count }
print(down) // ["banana", "hello", "hi"]Closure dapat membandingkan nilai turunan apa pun, panjang, huruf terakhir, atau entri dalam hash. Apa pun yang dibandingkan closure menentukan pengurutan.
min(by:) dan max(by:) bekerja dengan cara yang sama, tetapi mengembalikan satu elemen opsional, bukan salinan yang sudah diurutkan.
Tantangan
SedangBaca satu baris input: daftar pasangan name:age yang dipisahkan koma.
Cetak tiga baris:
- Nama diurutkan berdasarkan usia secara menaik, lalu digabungkan dengan
,. Jika usia sama, urutkan nama yang sama usia berdasarkan abjad. - Nama orang tertua (gunakan
max(by:)). Jika usia sama, pilih orang yang muncul lebih dulu. - Nama orang termuda (gunakan
min(by:)). Jika usia sama, pilih orang yang muncul lebih dulu.
Untuk input alice:30,bob:22,cara:30,dan:18, output-nya adalah:
dan,bob,alice,cara
alice
danCoba sendiri
let people = readLine()!.components(separatedBy: ",").map { pair -> (String, Int) in
let parts = pair.components(separatedBy: ":")
return (parts[0], Int(parts[1])!)
}
// TODO: urutkan berdasarkan usia secara menaik (jika usia sama, urutkan berdasarkan nama); gunakan max(by:) untuk yang tertua; min(by:) untuk yang termuda
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika dan Alur
1Mendalami string
Jumlah dan indeksHuruf besar, huruf kecil, dan hapus spasiMencari dalam stringMemisahkan dan menggabungkanMengganti substringUlasan: Memeriksa nama pengguna4set
Membuat setGabungan dan IrisanSelisih dan Selisih SimetrisHimpunan Bagian dan Himpunan SupersetRingkasan: Filter Tag7Proyek: Pelacak Kebiasaan
Gambaran Umum ProyekTandai Selesai2Rentang dan Langkah
Rentang Tertutup vs Setengah TerbukaLangkahMetode RentangRentang dalam SwitchRangkuman: Kisi Kalender3dictionary
Mendeklarasikan dictionaryPencarian OpsionalMemperbarui dictionaryMenelusuri dictionaryMengelompokkan NilaiRangkuman: Inventaris6Fungsi Orde Tinggi Bagian 2
compactMapflatMapsorted(by:)Membangun PipelineRingkasan: Papan PeringkatLatihan sendiri: Playground Swift