Intern
Šta je hash (HASH) u Ruby-ju?
sobes.tech АИ
Одговор од АИ
Hash (Hash) u Rubyju je uređena kolekcija parova "ključ-vrednost", gde je svaki jedinstveni ključ povezan sa određenom vrednošću. Ključevi su obično simboli (Symbol) ili nizovi (String), ali mogu biti bilo koji objekti za koje su implementirane metode eql? i hash.
Osobine hasha:
- Uređenost: Od verzije Ruby 1.9, hashovi podržavaju redosled umetanja elemenata.
- Pristup po ključu: Pristup vrednostima je brz po odgovarajućem ključu.
- Dinamička veličina: Hashovi se mogu proširivati ili smanjivati dodavanjem ili uklanjanjem elemenata.
- Nema duplikata ključeva: Svaki ključ je jedinstven u okviru jednog hasha.
Primeri kreiranja hasha:
# Korišćenje literala
person = { "name" => "Alice", "age" => 30 }
# Korišćenje simbola kao ključeva (češće i efikasnije)
settings = { :theme => "dark", :language => "ru" }
# Notacija u stilu ključnih reči (Key-Value Pair Shorthand), od Ruby 1.9
config = { host: "localhost", port: 8080 }
# Pomoću konstruktora Hash.new
empty_hash = Hash.new
Osnovne operacije sa hash-ovima:
| Operacija | Primer | Opis |
|---|---|---|
| Pristup vrednosti | person["name"] |
Vraća vrednost po ključu "name" |
| Dodavanje/promena | person["city"] = "New York" |
Dodaje par ili menja vrednost po ključu |
| Brisanje | person.delete("age") |
Uklanja par po ključu "age" |
| Veličina | person.size ili person.length |
Vraća broj parova u hashu |
| Provera ključa | person.key?("name") |
Proverava prisustvo ključa u hashu |
| Provera vrednosti | person.value?(30) |
Proverava prisustvo vrednosti u hashu |
| Iteracija | `person.each { | key, value |
| Vraćanje ključeva | person.keys |
Vraća niz svih ključeva |
| Vraćanje vrednosti | person.values |
Vraća niz svih vrednosti |
Primer upotrebe:
user_data = {
name: "Борис",
age: 45,
city: "Москва"
}
# Pristup podacima
puts user_data[:name] # => Борис
# Dodavanje novog polja
user_data[:job] = "Разработчик"
# Izmena vrednosti
user_data[:age] = 46
# Uklanjanje polja
user_data.delete(:city)
# Iteracija kroz hash
user_data.each do |key, value|
puts "#{key}: #{value}"
end