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}"
endeach_key hanya menelusuri kunci:
prices.each_key { |k| puts k } # apple, bread, milkeach_value hanya menelusuri nilai:
prices.each_value { |v| puts v } # 1, 3, 4Dan 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}Tantangan
SedangKamu 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:
- 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 denganeach. Urutan item tetap sama seperti semula. Gunakan pembagian bilangan bulat untuk diskon (price / 2). Was: $<n>: total asli (gunakanvalues.sum)Now: $<n>: total setelah diskon- Nama item yang harga akhirnya masih di atas
2, digabung dengan,(gunakanselect+keyspada hash baru)
Untuk input bread,milk dengan hash bawaan, outputnya adalah:
apple: $1
bread: $1
milk: $2
cheese: $6
Was: $14
Now: $10
cheeseCoba 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
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