Hash.new dengan Nilai Bawaan
Termasuk bagian Logika dan Alur dalam perjalanan Ruby di Coddy. Pelajaran 33 dari 56.
Secara default, mencari kunci yang tidak ada dalam hash akan menghasilkan nil:
scores = {}
puts scores["Alice"] # nilHash.new(default) mengubah hal itu. Setiap key yang tidak ada mengembalikan nilai yang kamu berikan:
scores = Hash.new(0)
puts scores["Alice"] # 0Ini cara paling rapi untuk menulis penghitung. Kamu tidak perlu memeriksa if scores[name].nil? sebelum menambah nilainya:
counts = Hash.new(0)
["a", "b", "a", "c", "a"].each do |letter|
counts[letter] += 1
end
puts counts.inspect # {"a"=>3, "b"=>1, "c"=>1}Penting: Hash.new(0) menetapkan nilai default ke 0, tetapi tidak menyimpan kunci saat kamu membacanya. Hash tetap kosong sampai kamu menetapkan nilai. Jadi, setelah kamu menulis counts[letter] += 1, kunci ditambahkan dengan nilai baru.
Tantangan
MudahBaca list entri category:amount yang dipisahkan koma (misalnya, food:12,gas:30,food:8,books:25,gas:15). Buat hash berisi total per kategori menggunakan Hash.new(0), lalu cetak hanya kategori yang totalnya minimal 20, satu kategori per baris, diurutkan berdasarkan total dari terbesar ke terkecil:
<category>: <total>Untuk input contoh di atas, output-nya adalah:
gas: 45
books: 25
food: 20Jika tidak ada kategori yang mencapai 20, jangan cetak apa pun.
Coba sendiri
entries = gets.chomp.split(",")
# TODO: totals = Hash.new(0); jumlahkan amount per kategori;
# lalu tampilkan kategori dengan total >= 20, diurutkan berdasarkan total dari terbesar ke terkecil
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