Menggabungkan dan Mengubah
Termasuk bagian Logika dan Alur dalam perjalanan Ruby di Coddy. Pelajaran 36 dari 56.
Saat bekerja dengan hash, ada dua operasi yang sangat sering digunakan sehingga Ruby menyediakan method khusus untuk keduanya.
merge menggabungkan dua hash menjadi hash baru. Jika keduanya memiliki key yang sama, nilai di sebelah kanan akan digunakan:
defaults = { color: "red", size: "M" }
custom = { size: "L" }
settings = defaults.merge(custom)
puts settings.inspect # {color: "red", size: "L"}Keduanya tidak diubah, merge mengembalikan hash baru.
transform_values membuat hash baru dengan kunci yang sama, tetapi setiap nilainya diproses melalui sebuah blok:
prices = { apple: 1, bread: 3 }
with_tax = prices.transform_values { |p| p * 1.2 }
puts with_tax.inspect # {apple: 1.2, bread: 3.6}Dan transform_keys melakukan hal yang sama untuk kunci, berguna saat mengonversi string menjadi simbol atau menormalkan huruf besar-kecil:
{ "a" => 1, "B" => 2 }.transform_keys(&:upcase)
# {"A"=>1, "B"=>2}Tantangan
SedangDiberikan dua hash keranjang: monday dan tuesday, masing-masing memetakan nama item berupa string ke jumlah berupa bilangan bulat. Toko ingin mendapatkan total dua hari yang dinormalisasi.
Buat satu hash akhir dengan cara:
- menggabungkan kedua hash menggunakan
mergedengan blok, sehingga key yang ada di keduanya memiliki jumlah yang ditambahkan (bukan ditimpa) - menerapkan
transform_keys(&:to_sym)pada hasilnya, sehingga key menjadi symbol - menggunakan
transform_valuesuntuk menerapkan diskon grosir 10%: setiap jumlah menjadi(qty * 9 / 10)dengan aritmetika bilangan bulat
Cetak hash akhir dengan inspect.
Untuk data default, output-nya adalah:
{:apples=>9, :bread=>4, :milk=>5, :cheese=>1}(Apel: 5 + 5 = 10, lalu 9. Roti: 3 + 2 = 5, lalu 4. Susu: hanya 6 pada hari Senin → 5. Keju: hanya 2 pada hari Selasa → 1.)
Coba sendiri
monday = { "apples" => 5, "bread" => 3, "milk" => 6 }
tuesday = { "apples" => 5, "bread" => 2, "cheese" => 2 }
# TODO: gunakan merge-with-block untuk menjumlahkan kunci yang sama, lalu ubah kunci menjadi simbol,
# lalu terapkan * 9 / 10 pada setiap nilai, lalu periksa hasilnya
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 Kustom7Hash Bagian 2
Hash.new dengan Nilai BawaanMenelusuri HashHash BersarangMenggabungkan dan MengubahRangkuman: Penghitung Frekuensi5Andalan 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