Menu
CoddyTech

Menelusuri Hash

Termasuk bagian Logika dan Alur dalam perjalanan Ruby di Coddy. Pelajaran 34 dari 56.

Hash dapat diiterasi, jadi kamu bisa mengiterasinya seperti array. Ada tiga pola umum, tergantung pada tujuanmu.

each memberikan kamu kunci dan nilai:

prices = { apple: 1, bread: 3, milk: 4 }
prices.each do |item, price|
  puts "#{item}: $#{price}"
end

each_key hanya menelusuri kunci:

prices.each_key { |k| puts k }   # apple, bread, milk

each_value hanya menelusuri nilai:

prices.each_value { |v| puts v }   # 1, 3, 4

Dan setiap method Enumerable yang kamu lihat di bab sebelumnya, map, select, reduce: juga berfungsi pada hash. Kamu hanya menerima pasangan key/value (atau array 2 elemen) pada setiap iterasi:

prices.select { |item, price| price > 2 }
# {bread: 3, milk: 4}
challenge icon

Tantangan

Sedang

Kamu sedang menerapkan diskon pada daftar harga. Hash prices sudah diberikan (simbol item => bilangan bulat harga).

Baca satu baris input: daftar item yang dipisahkan koma untuk diberi diskon 50% (cocokkan dengan simbol dalam hash berdasarkan nama).

Cetak dengan urutan berikut:

  1. Satu baris untuk setiap item dengan format <item>: $<final_price>, dengan harga akhir berupa nilai yang sudah didiskon jika item tercantum dalam daftar diskon, atau nilai asli jika tidak. Lakukan iterasi dengan each. Urutan item tetap sama seperti semula. Gunakan pembagian bilangan bulat untuk diskon (price / 2).
  2. Was: $<n>: total asli (gunakan values.sum)
  3. Now: $<n>: total setelah diskon
  4. Nama item yang harga akhirnya masih di atas 2, digabung dengan , (gunakan select + keys pada hash baru)

Untuk input bread,milk dengan hash bawaan, outputnya adalah:

apple: $1
bread: $1
milk: $2
cheese: $6
Was: $14
Now: $10
cheese

Coba sendiri

prices = { apple: 1, bread: 3, milk: 4, cheese: 6 }
discount = gets.chomp.split(",").map(&:to_sym)

# TODO: buat hash harga akhir dengan each; cetak baris, total, dan item mahal
quiz iconUji dirimu

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

Semua pelajaran di Logika dan Alur

Latihan sendiri: Compiler Ruby online