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