Intern
Czym jest hash (HASH) w Ruby?
sobes.tech AI
Odpowiedź od AI
Hash (Hash) w Ruby to uporządkowana kolekcja par "klucz-wartość", gdzie każdemu unikalnemu kluczowi przypisana jest określona wartość. Klucze zazwyczaj są symbolami (Symbol) lub łańcuchami (String), ale mogą być dowolnym obiektem, który implementuje metody eql? i hash.
Cechy hasha:
- Porządek: Od wersji Ruby 1.9 hashe zachowują kolejność dodawania elementów.
- Dostęp po kluczu: Dostęp do wartości jest szybki i odbywa się przez odpowiedni klucz.
- Dynamika rozmiaru: Hash może się rozszerzać lub kurczyć w miarę dodawania lub usuwania elementów.
- Brak duplikatów kluczy: Każdy klucz jest unikalny w obrębie jednego hasha.
Przykłady tworzenia haszy:
# Użycie literału
osoba = { "name" => "Alice", "age" => 30 }
# Użycie symboli jako kluczy (bardziej powszechne i wydajne)
ustawienia = { :theme => "ciemny", :language => "ru" }
# Notacja w stylu klucz-wartość (Ruby 1.9+)
config = { host: "localhost", port: 8080 }
# Za pomocą konstruktora Hash.new
pusty_hash = Hash.new
Podstawowe operacje na hashach:
| Operacja | Przykład | Opis |
|---|---|---|
| Dostęp do wartości | osoba["name"] |
Zwraca wartość dla klucza "name" |
| Dodanie/zmiana | osoba["city"] = "New York" |
Dodaje lub zmienia parę klucz-wartość |
| Usunięcie | osoba.delete("age") |
Usuwa parę o kluczu "age" |
| Rozmiar | osoba.size lub osoba.length |
Zwraca liczbę par w hashu |
| Sprawdzenie klucza | osoba.key?("name") |
Sprawdza, czy klucz istnieje w hashu |
| Sprawdzenie wartości | osoba.value?(30) |
Sprawdza, czy wartość istnieje w hashu |
| Iteracja | `osoba.each { | key, value |
| Klucze | osoba.keys |
Zwraca tablicę wszystkich kluczy |
| Wartości | osoba.values |
Zwraca tablicę wszystkich wartości |
Przykład użycia:
dane_uzytkownika = {
name: "Boris",
age: 45,
city: "Moscow"
}
# Dostęp do danych
puts dane_uzytkownika[:name] # => Boris
# Dodanie nowego pola
dane_uzytkownika[:job] = "Developer"
# Zmiana wartości
dane_uzytkownika[:age] = 46
# Usunięcie pola
dane_uzytkownika.delete(:city)
# Iteracja po hashu
dane_uzytkownika.each do |key, value|
puts "#{key}: #{value}"
end