Sobes.tech
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