Menu
CoddyTech

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.

challenge icon

Tantangan

Sedang

Baca satu baris input: daftar pasangan name:age yang dipisahkan koma.

Cetak tiga baris:

  1. Nama diurutkan berdasarkan usia secara menaik, lalu digabungkan dengan ,. Jika usia sama, urutkan nama yang sama usia berdasarkan abjad.
  2. Nama orang tertua (gunakan max(by:)). Jika usia sama, pilih orang yang muncul lebih dulu.
  3. 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
dan

Coba 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
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Logika dan Alur

Latihan sendiri: Playground Swift