Darsliklar Ruby Hash

Ruby Ruby Hash

Hash — kalit va qiymat juftliklarida ma’lumot saqlaydigan to’plam. Massivdan farqi: elementga sonli indeks emas, o’zingiz belgilagan kalit orqali murojaat qilinadi.

Hashkalit-qiymat (key-value) juftliklaridan tashkil topgan to’plam klassi. Har bir kalit noyob bo’lishi shart, qiymatlar esa takrorlanishi mumkin.

Hash yaratish va qiymatga murojaat

Hash figurali qavs ichida, kalit va qiymat orasida => yoki (kalit symbol bo’lsa) qisqa : shakli bilan yaratiladi:

foydalanuvchi = {
  ism: "Master Sherkulov",
  yosh: 30,
  faol: true
}

puts foydalanuvchi[:ism]
puts foydalanuvchi[:yosh]
Master Sherkulov
30

ism: "Master Sherkulov" yozuvi :ism => "Master Sherkulov"ning qisqartmasi — kalit avtomatik Symbol turida bo’ladi. Qiymatga kalitni kvadrat qavs ichida ko’rsatib murojaat qilinadi.

Yangi kalit qo’shish va yangilash

Hash ham massiv kabi o’zgaruvchan — unga istalgan vaqtda yangi kalit qo’shish yoki mavjudini yangilash mumkin:

mahsulot = {nomi: "Telefon", narx: 3000000}
mahsulot[:narx] = 2500000
mahsulot[:chegirma] = true

puts mahsulot.inspect
{:nomi=>"Telefon", :narx=>2500000, :chegirma=>true}

Agar kalit mavjud bo’lsa, qiymat yangilanadi; mavjud bo’lmasa, yangi juftlik qo’shiladi — massivda bo’lgani kabi, kalit oldindan e’lon qilinishi shart emas.

Mavjud bo’lmagan kalit va fetch

Mavjud bo’lmagan kalitga to’g’ridan-to’g’ri murojaat qilinsa, xato o’rniga nil qaytadi — bu ba’zan yashirin xatolarga sabab bo’lishi mumkin:

sozlamalar = {til: "uz"}

puts sozlamalar[:mavzu]
puts sozlamalar.fetch(:mavzu, "standart")
standart

sozlamalar[:mavzu] — kalit topilmagani uchun nil qaytardi va bo’sh qator chop etildi. fetch esa ikkinchi argument sifatida berilgan standart qiymatni qaytaradi, agar kalit topilmasa. Ishonchli kod uchun fetch ko’pincha [] dan afzal ko’riladi.

Hash bo’ylab yurish

Har bir kalit-qiymat juftligini navbat bilan ko’rib chiqish uchun each metodi ishlatiladi:

narxlar = {non: 4000, sut: 12000, tuxum: 25000}

narxlar.each do |mahsulot, narx|
  puts "#{mahsulot}: #{narx} so'm"
end
non: 4000 so'm
sut: 12000 so'm
tuxum: 25000 so'm

Blok ikkita parametr qabul qiladi — kalit va qiymat. Bu naqsh Ruby’da hash bilan ishlashning eng tabiiy usuli; for sikli bilan yozishdan ko’ra tavsiya etiladi.