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