Membangun Pipeline
Termasuk bagian Logika dan Alur dalam perjalanan Swift di Coddy. Pelajaran 31 dari 56.
Method yang sudah kamu pelajari, map, filter, reduce, compactMap, flatMap, sorted(by:), adalah perangkat Swift yang kamu gunakan sehari-hari. Kode nyata menggabungkan semuanya.
struct Order {
let item: String
let qty: Int
}
let orders = [Order(item: "apple", qty: 3), Order(item: "bread", qty: 0), Order(item: "milk", qty: 5)]
let names = orders
.filter { $0.qty > 0 }
.sorted { $0.qty > $1.qty }
.map { $0.item }
print(names) // ["milk", "apple"]Baca rantai dari atas ke bawah: pertahankan pesanan yang tidak kosong, urutkan berdasarkan kuantitas dari terbesar ke terkecil, lalu ambil namanya saja.
Pipeline akan lebih baik jika setiap langkah memiliki satu tujuan. Jika kamu melakukan dua hal sekaligus di dalam closure (memetakan dan memfilter), pisahkan menjadi dua langkah. Rangkaian ini tetap mudah dibaca saat bertambah panjang.
Tantangan
SedangBaca satu baris input: daftar entri name:price:qty yang dipisahkan dengan koma. Beberapa entri tidak valid dan harus dilewati: entri apa pun yang harga atau kuantitasnya bukan integer yang valid.
Buat pipeline yang menghasilkan satu baris untuk setiap entri valid dengan qty > 0, diurutkan berdasarkan total (price * qty) secara menurun, dengan format:
<name>: <total>Setelah baris per item, cetak satu baris ringkasan: Sum: <n> dengan total keseluruhan.
Untuk input apple:3:2,bread:bad:1,milk:4:5,cheese:8:0,salt:2:7, output-nya adalah:
milk: 20
salt: 14
apple: 6
Sum: 40Coba sendiri
let entries = readLine()!.components(separatedBy: ",")
// TODO: buat pipeline dengan compactMap (parse), filter (qty > 0),
// sorted (total desc), map (format); cetak lines + Sum
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