Sobes.tech
Intern

Čo je hash (HASH) v Ruby?

sobes.tech AI

Odpoveď od AI

Hash v Ruby je usporiadaná kolekcia párů "kľúč-hodnota", kde je každý unikátny kľúč spojený s určitým hodnotou. Kľúče sú zvyčajne symboly (Symbol) alebo reťazce (String), ale môžu byť akékoľvek objekty, pre ktoré sú implementované metódy eql? a hash.

Vlastnosti hashu:

  • Usporiadanosť: Od verzie Ruby 1.9 hashy podporujú poradie vkladania prvkov.
  • Prístup podľa kľúča: Prístup k hodnotám je rýchly podľa zodpovedajúceho kľúča.
  • Dynamická veľkosť: Hashy sa môžu rozširovať alebo zmenšovať podľa pridávania alebo odstraňovania prvkov.
  • Nedostatok duplicitných kľúčov: Každý kľúč je unikátny v rámci jedného hashu.

Príklady vytvárania hashu:

# Použitie literálu
person = { "name" => "Alice", "age" => 30 }

# Použitie symbolov ako kľúčov (častejšie a efektívnejšie)
settings = { :theme => "dark", :language => "ru" }

# Notácia v štýle kľúčových slov (Key-Value Pair Shorthand), od Ruby 1.9
config = { host: "localhost", port: 8080 }

# Pomocou konštruktora Hash.new
empty_hash = Hash.new

Hlavné operácie s hashmi:

Operácia Príklad Popis
Prístup k hodnotám person["name"] Vráti hodnotu podľa kľúča "name"
Pridanie/zmena person["city"] = "New York" Pridá pár alebo zmení hodnotu podľa kľúča
Odstránenie person.delete("age") Odstraňuje pár podľa kľúča "age"
Veľkosť person.size alebo person.length Vráti počet pár v hashi
Kontrola kľúča person.key?("name") Kontroluje prítomnosť kľúča v hashi
Kontrola hodnoty person.value?(30) Kontroluje prítomnosť hodnoty v hashi
Iterácia `person.each { key, value
Vrátenie kľúčov person.keys Vráti pole všetkých kľúčov
Vrátenie hodnôt person.values Vráti pole všetkých hodnôt

Príklad použitia:

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

# Prístup k dátam
puts user_data[:name]   # => Борис

# Pridanie nového poľa
user_data[:job] = "Разработчик"

# Zmena hodnoty
user_data[:age] = 46

# Odstránenie poľa
user_data.delete(:city)

# Prechádzanie hashu
user_data.each do |key, value|
  puts "#{key}: #{value}"
end