flatMap
Termasuk bagian Logika dan Alur dalam perjalanan Swift di Coddy. Pelajaran 29 dari 56.
flatMap digunakan saat setiap elemen menghasilkan beberapa hasil. Closure mengembalikan sebuah array, lalu flatMap menggabungkan semuanya menjadi satu array datar.
let groups = [[1, 2, 3], [4, 5], [6]]
let all = groups.flatMap { $0 }
print(all) // [1, 2, 3, 4, 5, 6]Kamu juga bisa melakukan pekerjaan nyata di dalam closure. Memetakan setiap nilai ke array kecil lalu meratakan hasilnya dalam satu langkah adalah kasus penggunaan yang umum:
let nums = [1, 2, 3]
let pairs = nums.flatMap { [$0, $0 * $0] }
print(pairs) // [1, 1, 2, 4, 3, 9]Bandingkan dengan map: itu akan menghasilkan [[Int]], sebuah array yang berisi array kecil, yang perlu kamu ratakan dengan langkah lain. flatMap menggabungkan kedua langkah itu menjadi satu.
Tantangan
MudahBaca dua baris input:
- list bilangan bulat yang dipisahkan koma, yaitu
nums - list bilangan bulat yang dipisahkan koma, yaitu
repeats(panjangnya sama dengannums)
Untuk setiap i, ulangi nums[i] tepat sebanyak repeats[i] kali. Cetak array datar yang dihasilkan, dengan nilai-nilainya digabungkan menggunakan ,. Gunakan flatMap.
Untuk input 5,7,2 pada baris 1 dan 3,1,2 pada baris 2, outputnya adalah 5,5,5,7,2,2.
Coba sendiri
let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }
let repeats = readLine()!.components(separatedBy: ",").map { Int($0)! }
// TODO: gunakan flatMap untuk mengubah setiap (num, repeat) menjadi Array(repeating:count:); gabungkan dengan ","
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 KalenderLatihan sendiri: Playground Swift