Освоение уменьшения хеширования в Ruby: упрощение кода с помощью разговорных примеров

Хеши — это важная структура данных в Ruby, позволяющая нам эффективно хранить пары ключ-значение. Одним из мощных методов манипулирования и извлечения информации из хэшей является сокращение. В этой статье блога мы рассмотрим различные методы Ruby, которые позволяют нам уменьшать хэши, делая наш код более кратким и читабельным. Итак, хватайте свой любимый напиток и давайте окунемся в мир снижения хэша!

Методы уменьшения хэша:

  1. reduceили inject:
    Метод reduce(также известный как inject) — это универсальный метод, который позволяет нам перебирать хэш и накапливать одно значение на основе логики, определенной внутри блока. Допустим, у нас есть хэш продуктов и соответствующие им цены:
products = { 'apple' => 1.99, 'banana' => 0.99, 'orange' => 2.49 }
total_price = products.reduce(0) { |sum, (product, price)| sum + price }
puts "Total price: $#{total_price}"

Выход:

Total price: $5.47
  1. merge:
    Метод mergeпозволяет нам объединить два хэша, при этом повторяющиеся ключи разрешаются на основе порядка слияния. Мы можем использовать mergeдля объединения нескольких хешей в один. Например:
hash1 = { 'a' => 1, 'b' => 2 }
hash2 = { 'b' => 3, 'c' => 4 }
merged_hash = hash1.merge(hash2)
puts merged_hash

Выход:

{ 'a' => 1, 'b' => 3, 'c' => 4 }
  1. transform_values:
    Метод transform_valuesпозволяет нам применять преобразование к каждому значению хеша, создавая новый хэш с измененными значениями. Допустим, у нас есть хэш температур в градусах Цельсия, и мы хотим преобразовать их в градусы Фаренгейта:
temperatures = { 'London' => 10, 'Paris' => 15, 'New York' => 5 }
converted_temperatures = temperatures.transform_values { |celsius| (celsius * 9/5) + 32 }
puts converted_temperatures

Выход:

{ 'London' => 50, 'Paris' => 59, 'New York' => 41 }
  1. select:
    Метод selectпозволяет нам фильтровать хэш на основе заданного условия, возвращая новый хэш с парами ключ-значение. которые удовлетворяют условию. Давайте отфильтруем хэш оценок учащихся, чтобы включить только тех, кто набрал более 80 баллов:
grades = { 'Alice' => 90, 'Bob' => 75, 'Charlie' => 85, 'Diana' => 95 }
high_grades = grades.select { |_, grade| grade > 80 }
puts high_grades

Выход:

{ 'Alice' => 90, 'Charlie' => 85, 'Diana' => 95 }
  1. delete_if:
    Метод delete_ifпозволяет нам удалять из хэша пары ключ-значение, которые удовлетворяют заданному условию. Давайте удалим из хеша инвентаря все фрукты, количество которых меньше 10:
inventory = { 'apple' => 15, 'banana' => 5, 'orange' => 20 }
inventory.delete_if { |_, quantity| quantity < 10 }
puts inventory

Выход:

{ 'apple' => 15, 'orange' => 20 }