Sobes.tech
Intern

Mis on hash (HASH) Ruby's?

sobes.tech AI

Vastus AI-lt

Hash (Hash) Ruby on organiseeritud paaride "võti-väärtus" kogumik, kus iga unikaalne võti on seotud kindla väärtusega. Võtmed on tavaliselt sümbolid (Symbol) või stringid (String), kuid võivad olla mis tahes objektid, millele on rakendatud meetodid eql? ja hash.

Hashi omadused:

  • Järjekord: Alates Ruby 1.9 versioonist toetavad hashid elementide sisestamise järjekorda.
  • Juurdepääs võtme järgi: Väärtustele pääseb kiiresti vastava võtme kaudu.
  • Dünaamiline suurus: Hashid võivad kasvada või väheneda, lisades või eemaldades elemente.
  • Unikaalsed võtmed: Iga võti on hashis unikaalne.

Hashi loomise näited:

# Kasutades kirjeldusega
person = { "name" => "Alice", "age" => 30 }

# Kasutades sümboleid võtmetena (levinum ja tõhusam)
settings = { :theme => "dark", :language => "ru" }

# Notatsioon stiilis võtme-sõna (Key-Value Pair Shorthand), alates Ruby 1.9
config = { host: "localhost", port: 8080 }

# Hashi konstruktor Hash.new
empty_hash = Hash.new

Peamised operatsioonid hashidega:

Operatsioon Näide Kirjeldus
Väärtusele pääsemine person["name"] Tagastab väärtuse võtmega "name"
Lisamine/muutmine person["city"] = "New York" Lisab või muudab väärtust võtmega
Kustutamine person.delete("age") Kustutab paari võtmega "age"
Suurus person.size või person.length Tagastab paaride arvu hashis
Võtme olemasolu person.key?("name") Kontrollib, kas võti on hashis
Väärtuse olemasolu person.value?(30) Kontrollib, kas väärtus on hashis
Iteratsioon `person.each { key, value
Võtmete tagastamine person.keys Tagastab kõigi võtmete massiivi
Väärtuste tagastamine person.values Tagastab kõigi väärtuste massiivi

Näide kasutamisest:

user_data = {
  name: "Борис",
  age: 45,
  city: "Москва"
}

# Andmetele juurdepääs
puts user_data[:name]   # => Борис

# Uue välja lisamine
user_data[:job] = "Разработчик"

# Väärtuse muutmine
user_data[:age] = 46

# Välja eemaldamine
user_data.delete(:city)

# Hashi läbimine
user_data.each do |key, value|
  puts "#{key}: #{value}"
end