Sobes.tech
Intern

Какво е хеш (HASH) в Ruby?

sobes.tech AI

Отговор от AI

Hash в Ruby е подредена колекция от двойки "ключ-стойност", където всеки уникален ключ е свързан с определена стойност. Ключовете обикновено са символи (Symbol) или низове (String), но могат да бъдат всякакви обекти, за които са реализирани методите eql? и hash.

Характеристики на хеша:

  • Подреденост: От версия Ruby 1.9 хешовете поддържат реда на вмъкване на елементите.
  • Достъп по ключ: Достъпът до стойностите е бърз по съответния ключ.
  • Динамичен размер: Хешовете могат да се разширяват или свиват при добавяне или премахване на елементи.
  • Липса на дублиращи се ключове: Всеки ключ е уникален в рамките на един хеш.

Примери за създаване на хеш:

# Използване на литерал
person = { "name" => "Alice", "age" => 30 }

# Използване на символи като ключове (по-често и по-ефективно)
settings = { :theme => "dark", :language => "ru" }

# Нотация в стил ключови думи (Key-Value Pair Shorthand), от Ruby 1.9
config = { host: "localhost", port: 8080 }

# С помощта на конструктор Hash.new
empty_hash = Hash.new

Основни операции с хешове:

Операция Пример Описание
Достъп до стойност person["name"] Връща стойността по ключ "name"
Добавяне/промяна person["city"] = "New York" Добавя двойка или променя стойността по ключ
Премахване person.delete("age") Премахва двойка по ключ "age"
Размер person.size или person.length Връща броя на двойките в хеша
Проверка за ключ person.key?("name") Проверява наличието на ключ в хеша
Проверка за стойност person.value?(30) Проверява наличието на стойност в хеша
Итерация `person.each { key, value
Връщане на ключове person.keys Връща масив с всички ключове
Връщане на стойности person.values Връща масив с всички стойности

Пример за използване:

user_data = {
  name: "Борис",
  age: 45,
  city: "Москва"
}

# Достъп до данните
puts user_data[:name]   # => Борис

# Добавяне на ново поле
user_data[:job] = "Разработчик"

# Промяна на стойността
user_data[:age] = 46

# Премахване на поле
user_data.delete(:city)

# Обхождане на хеша
user_data.each do |key, value|
  puts "#{key}: #{value}"
end