Intern
Kas yra hash (HASH) Rubyje?
sobes.tech AI
Atsakymas iš AI
Hash Ruby yra sutvarkyta porų "raktas-reikšmė" kolekcija, kur kiekvienas unikalus raktas yra susietas su tam tikra reikšme. Raktai dažniausiai yra simboliai (Symbol) arba eilutės (String), tačiau gali būti bet kokie objektai, kuriems įgyvendinti metodai eql? ir hash.
Hash ypatybės:
- Tvarkingumas: Nuo Ruby 1.9 versijos hashai palaiko įterptų elementų tvarką.
- Prieiga per raktą: Prieiga prie reikšmių yra greita pagal atitinkamą raktą.
- Dinamiškas dydis: Hashai gali būti plečiami arba mažinami pridedant arba pašalinant elementus.
- Unikalūs raktai: Kiekvienas raktas yra unikalus viename hesh'e.
Hash kūrimo pavyzdžiai:
# Naudojant literalią formą
person = { "name" => "Alice", "age" => 30 }
# Naudojant simbolius kaip raktus (dažniau ir efektyviau)
settings = { :theme => "dark", :language => "ru" }
# Notacija pagal žodžių stilių (Key-Value Pair Shorthand), nuo Ruby 1.9
config = { host: "localhost", port: 8080 }
# Naudojant Hash.new konstruktorių
empty_hash = Hash.new
Pagrindinės operacijos su hash:
| Operacija | Pavyzdys | Aprašymas |
|---|---|---|
| Prieiga prie reikšmės | person["name"] |
Grąžina reikšmę pagal raktą "name" |
| Pridėjimas/pakeitimas | person["city"] = "New York" |
Prideda arba pakeičia reikšmę pagal raktą |
| Pašalinimas | person.delete("age") |
Pašalina porą pagal raktą "age" |
| Dydis | person.size arba person.length |
Grąžina porų skaičių hash'e |
| Raktų patikra | person.key?("name") |
Patikrina, ar raktas yra hash'e |
| Reikšmių patikra | person.value?(30) |
Patikrina, ar reikšmė yra hash'e |
| Iteracija | `person.each { | key, value |
| Raktų grąžinimas | person.keys |
Grąžina visų raktų masyvą |
| Reikšmių grąžinimas | person.values |
Grąžina visų reikšmių masyvą |
Pavyzdys naudojimo:
user_data = {
name: "Борис",
age: 45,
city: "Москва"
}
# Prieiga prie duomenų
puts user_data[:name] # => Борис
# Naujo lauko pridėjimas
user_data[:job] = "Разработчик"
# Reikšmės keitimas
user_data[:age] = 46
# Lauko pašalinimas
user_data.delete(:city)
# Hash iteracija
user_data.each do |key, value|
puts "#{key}: #{value}"
end