Reduce / Inject
Termasuk bagian Logika dan Alur dalam perjalanan Ruby di Coddy. Pelajaran 23 dari 56.
Terkadang kamu perlu meringkas seluruh array menjadi satu nilai, seperti jumlah, hasil kali, atau string terpanjang. reduce (juga disebut inject: method yang sama, dua nama) adalah alatnya.
Blok ini menerima dua parameter: akumulator dan elemen saat ini. Nilai kembalian blok menjadi akumulator berikutnya.
total = [1, 2, 3, 4].reduce(0) { |acc, n| acc + n }
puts total # 10Langkah demi langkah, akumulatornya adalah 0 → 1 → 3 → 6 → 10.
Argumen pertama adalah nilai awal akumulator. Jika kamu menghilangkannya, Ruby menggunakan elemen pertama dari array:
[1, 2, 3, 4].reduce { |acc, n| acc * n } # 24Untuk operasi sederhana seperti penjumlahan dan perkalian, Ruby menyediakan cara pintas, yaitu meneruskan simbol alih-alih blok:
[1, 2, 3, 4].reduce(:+) # 10
[1, 2, 3, 4].reduce(:*) # 24Setelah kamu bisa membuat accumulator kustom, kamu bisa menghitung hampir apa saja dalam satu kali lintasan.
Tantangan
MudahBaca list bilangan bulat yang dipisahkan dengan koma. Cetak tiga baris:
- Jumlahnya (gunakan
reduce(:+)) - Hasil kalinya (gunakan
reduce(:*)) - Nilai maksimum, dihitung dengan
reducedan blok eksplisit, bukan dengan menggunakanmax.
Untuk input 2,5,3,8, output-nya adalah:
18
240
8Coba sendiri
numbers = gets.chomp.split(",").map(&:to_i)
# TODO: tampilkan jumlah, hasil kali, dan nilai maksimum (dengan reduce + blok eksplisit)
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika dan Alur
1Mendalami String
Ringkasan Method StringInterpolasi StringMenelusuri StringMemisahkan dan MenggabungkanRekap: Perangkai String4Block, Proc, dan Lambda
Apa Itu Block?do..end vs Kurung KurawalKata Kunci yieldParameter BlockProc dan LambdaRangkuman, Iterator Kustom5Andalan Enumerable
Select dan RejectMerangkai MapReduce / Injectcount, all?, any?, none?group_by dan partitionsort_by, min_by, max_byRekap: Alur Data8Pengambilan Keputusan Lanjutan
Case dengan class & regexwhen dengan Banyak NilaiOperator Ternaryif / unless SebarisUlasan, Pengklasifikasi NilaiLatihan sendiri: Compiler Ruby online