Sobes.tech
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