Главная страница » Ruby » 19. Хеши
Хеши (или ассоциативные массивы) в Ruby — это коллекции пар ключ-значение. Они позволяют хранить и извлекать данные по ключу, что делает их удобными для представления данных с явной ассоциацией. Хеши являются важной частью Ruby и широко используются для хранения структурированных данных.
Хеши можно создавать несколькими способами.
2.1. Использование литерала хеша
# Создание хеша с использованием литерала
person = {
"name" => "Alice",
"age" => 30,
"city" => "New York"
}
2.2. Использование метода Hash.new
# Создание пустого хеша
empty_hash = Hash.new
# Создание хеша с дефолтным значением
default_hash = Hash.new("default_value")
К элементам хеша можно получить доступ с помощью ключей.
Пример:
person = {
"name" => "Alice",
"age" => 30,
"city" => "New York"
}
puts person["name"] # => "Alice"
puts person["age"] # => 30
Элементы хеша можно добавлять, изменять или удалять.
4.1. Добавление и изменение элементов
person = {
"name" => "Alice",
"age" => 30
}
# Добавление нового элемента
person["city"] = "New York"
# Изменение существующего элемента
person["age"] = 31
puts person # => {"name"=>"Alice", "age"=>31, "city"=>"New York"}
4.2. Удаление элементов
person = {
"name" => "Alice",
"age" => 30,
"city" => "New York"
}
# Удаление элемента
person.delete("age")
puts person # => {"name"=>"Alice", "city"=>"New York"}
keys
и values
Методы keys
и values
возвращают массивы всех ключей и значений соответственно.
Пример:
person = {
"name" => "Alice",
"age" => 30,
"city" => "New York"
}
puts person.keys.inspect # => ["name", "age", "city"]
puts person.values.inspect # => ["Alice", 30, "New York"]
each
Метод each
перебирает пары ключ-значение в хеше.
Пример:
person = {
"name" => "Alice",
"age" => 30,
"city" => "New York"
}
person.each do |key, value|
puts "#{key}: #{value}"
end
select
Метод select
возвращает новый хеш, содержащий элементы, для которых блок возвращает true
.
Пример:
person = {
"name" => "Alice",
"age" => 30,
"city" => "New York"
}
selected = person.select { |key, value| value.is_a?(String) }
puts selected # => {"name"=>"Alice", "city"=>"New York"}
merge
Метод merge
объединяет два хеша, возвращая новый хеш.
Пример:
person = {
"name" => "Alice",
"age" => 30
}
address = {
"city" => "New York",
"zip" => "10001"
}
merged = person.merge(address)
puts merged # => {"name"=>"Alice", "age"=>30, "city"=>"New York", "zip"=>"10001"}
default
Метод default
возвращает значение, возвращаемое по умолчанию для ключей, которые не существуют в хеше.
Пример:
default_hash = Hash.new("default_value")
puts default_hash["non_existent_key"] # => "default_value"
Если вы используете неверный ключ для доступа к значению, вы получите nil
.
Пример ошибки:
person = {
"name" => "Alice"
}
puts person["age"] # => nil (ключ "age" не существует)
Когда вы пытаетесь изменить значение по ключу, который не существует, ключ будет добавлен с новым значением.
Пример ошибки:
person = {
"name" => "Alice"
}
person["age"] = 30
puts person # => {"name"=>"Alice", "age"=>30}
Хеши в Ruby — это мощный инструмент для хранения и управления данными в формате ключ-значение. Понимание их методов и особенностей позволяет эффективно работать с данными и создавать гибкие структуры данных.
Создайте хеш, представляющий книгу с такими ключами, как «title», «author» и «year». Напишите метод, который принимает этот хеш и возвращает строку с полным описанием книги.
Напишите метод filter_keys
, который принимает хеш и возвращает новый хеш, содержащий только те элементы, у которых ключи начинаются с заданного префикса.
Пример решения:
# Задание 1
def book_description(book)
"#{book['title']} by #{book['author']}, published in #{book['year']}"
end
book = {
"title" => "The Great Gatsby",
"author" => "F. Scott Fitzgerald",
"year" => 1925
}
puts book_description(book) # => "The Great Gatsby by F. Scott Fitzgerald, published in 1925"
# Задание 2
def filter_keys(hash, prefix)
hash.select { |key, _| key.start_with?(prefix) }
end
data = {
"name" => "Alice",
"name_first" => "Alice",
"age" => 30,
"city" => "New York"
}
filtered = filter_keys(data, "name")
puts filtered # => {"name"=>"Alice", "name_first"=>"Alice"}
Проверьте свою программу, чтобы убедиться, что она правильно выполняет все операции и обрабатывает возможные ошибки.
Наша цель и главная задача сделать качественное образование в вашем браузере
Телефон: +375 33 910-08-92
Email: info@codefor.tech
Адрес: г. Барановичи, ул. Пирогова, д. 7
© 2024 Все права защищены. CodeFor.