Главная страница » 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-2025 Все права защищены. CodeFor.
 
													Язык сайта: