Menu
Coddy logo textTech

Символы как ключи хэша

Часть раздела Основы путешествия по Ruby на Coddy — урок 78 из 88.

До сих пор вы использовали строки в качестве ключей хеша с синтаксисом hash rocket. Однако Ruby-разработчики обычно используют вместо них символы, что обеспечивает более чистый и эффективный подход.

Помните символы, о которых мы говорили ранее? Это легковесные, неизменяемые идентификаторы, которые начинаются с двоеточия. При использовании символов в качестве ключей Ruby предоставляет специальный сокращенный синтаксис:

person = {name: "Alice", age: 25, city: "Paris"}

puts person  # Вывод: {:name=>"Alice", :age=>25, :city=>"Paris"}

Обратите внимание, как name: заменяет :name =>. Это сокращение работает только тогда, когда ключ является символом. Для доступа к значениям используйте символ с квадратными скобками:

person = {name: "Alice", age: 25}

puts person[:name]  # Выводит: Alice
puts person[:age]   # Выводит: 25

Добавление и изменение записей работают одинаково:

person = {name: "Alice"}

person[:city] = "Paris"
person[:name] = "Bob"

puts person  # Вывод: {:name=>"Bob", :city=>"Paris"}

Символы предпочтительнее использовать в качестве ключей хеша, так как они сравниваются быстрее, чем строки, и потребляют меньше памяти. Вы будете встречать этот паттерн повсюду в коде на Ruby, поэтому стоит к нему привыкнуть.

challenge icon

Задание

Легко

Прочитайте три строки входных данных:

  1. Марка автомобиля (строка)
  2. Название модели (строка)
  3. Год выпуска (целое число)

Создайте хеш с именем car, используя сокращенный синтаксис символов (например, key: value), со следующими парами ключ-значение:

  • :brand соответствует марке автомобиля
  • :model соответствует названию модели
  • :year соответствует году выпуска (как целое число)

Затем выполните следующие операции:

  1. Выведите значение ключа :model
  2. Добавьте новый ключ :color со значением "black"
  3. Обновите ключ :year, добавив 1 к его текущему значению
  4. Выведите итоговый хеш

Например, если входные данные — Toyota, Camry и 2020, вывод должен быть следующим:

Camry
{:brand=>"Toyota", :model=>"Camry", :year=>2021, :color=>"black"}

Если входные данные — Honda, Civic и 2018, вывод должен быть следующим:

Civic
{:brand=>"Honda", :model=>"Civic", :year=>2019, :color=>"black"}

Если входные данные — Ford, Mustang и 2023, вывод должен быть следующим:

Mustang
{:brand=>"Ford", :model=>"Mustang", :year=>2024, :color=>"black"}

Шпаргалка

Ruby предоставляет сокращенный синтаксис для создания хешей с ключами-символами:

person = {name: "Alice", age: 25, city: "Paris"}

Это эквивалентно использованию синтаксиса "hash rocket" с символами:

person = {:name => "Alice", :age => 25, :city => "Paris"}

Чтобы получить доступ к значениям хеша с ключами-символами, используйте квадратные скобки с символом:

puts person[:name]  # Выводит: Alice
puts person[:age]   # Выводит: 25

Добавление и изменение записей работает так же, как и с ключами-строками:

person[:city] = "Paris"  # Добавить новую пару ключ-значение
person[:name] = "Bob"    # Изменить существующее значение

Символы предпочтительнее в качестве ключей хеша, потому что они сравниваются быстрее, чем строки, и используют меньше памяти.

Попробуйте сами

# Чтение входных данных
brand = gets.chomp
model = gets.chomp
year = gets.chomp.to_i

# TODO: Напишите свой код ниже
# 1. Создайте хеш с именем 'car', используя сокращенный синтаксис символов с ключами :brand, :model и :year

# 2. Выведите значение ключа :model

# 3. Добавьте новый ключ :color со значением "black"

# 4. Обновите ключ :year, добавив 1 к его текущему значению

# 5. Выведите итоговый хеш
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы