Intern
Co je to hash (HASH) v Ruby?
sobes.tech AI
Odpověď od AI
Hash v Ruby je uspořádaná kolekce párů "klíč-hodnota", kde každý unikátní klíč je spojen s určitým hodnotou. Klíče jsou obvykle symboly (Symbol) nebo řetězce (String), ale mohou být jakýmikoli objekty, pro které jsou implementovány metody eql? a hash.
Vlastnosti hashe:
- Uspořádanost: Od verze Ruby 1.9 hashe podporují pořadí vkládání prvků.
- Přístup podle klíče: Přístup k hodnotám je rychlý podle odpovídajícího klíče.
- Dynamická velikost: Hashe se mohou rozšiřovat nebo zmenšovat podle přidávání nebo odstraňování prvků.
- Nepřítomnost duplicitních klíčů: Každý klíč je unikátní v rámci jednoho hashe.
Příklady vytváření hashe:
# Použití literálu
person = { "name" => "Alice", "age" => 30 }
# Použití symbolů jako klíčů (častější a efektivnější způsob)
settings = { :theme => "dark", :language => "ru" }
# Notace ve stylu klíčových slov (Key-Value Pair Shorthand), od Ruby 1.9
config = { host: "localhost", port: 8080 }
# Pomocí konstruktoru Hash.new
empty_hash = Hash.new
Hlavní operace s hashi:
| Operace | Příklad | Popis |
|---|---|---|
| Přístup k hodnotě | person["name"] |
Vrací hodnotu podle klíče "name" |
| Přidání/změna | person["city"] = "New York" |
Přidá pár nebo změní hodnotu podle klíče |
| Odstranění | person.delete("age") |
Odstraňuje pár podle klíče "age" |
| Velikost | person.size nebo person.length |
Vrací počet párů v hashi |
| Kontrola klíče | person.key?("name") |
Kontroluje přítomnost klíče v hashi |
| Kontrola hodnoty | person.value?(30) |
Kontroluje přítomnost hodnoty v hashi |
| Iterace | `person.each { | key, value |
| Vrácení klíčů | person.keys |
Vrací pole všech klíčů |
| Vrácení hodnot | person.values |
Vrací pole všech hodnot |
Příklad použití:
user_data = {
name: "Борис",
age: 45,
city: "Москва"
}
# Přístup k datům
puts user_data[:name] # => Борис
# Přidání nového pole
user_data[:job] = "Разработчик"
# Změna hodnoty
user_data[:age] = 46
# Odstranění pole
user_data.delete(:city)
# Iterace přes hash
user_data.each do |key, value|
puts "#{key}: #{value}"
end