Ruby Hashes

Хэш является структурой данных, поддерживающей набор объектов, известных как ключи, и связывающей с каждым ключом какое-нибудь значение. Хэши известны также как отображения, поскольку они отображают ключи на значения. Иногда их называют ассоциативными массивами, поскольку они связывают (ассоциируют) значения с каждым из ключей и могут рассматриваться как массивы, в которых в качестве индекса может использоваться не целое число, а любой объект.

С хэшем неотъемлимо связано понятие "хэш-таблица"

Пример;

# Этот хэш отобразит названия цифр на сами цифры

numbers = Hash.new # Создание нового пустого хэш-объекта

numbers["one"] = 1 # Отображение строки "единица" на Fixnum 1

numbers["two"] = 2 # Заметьте, что здесь мы пользуемся нотацией массива

numbers["three"] = 3

sum = numbers!!"one"] + numbers["two"] # Извлечение этих значений

Иначе так: хеш - это набор таких пар ключ-значение: «сотрудник» => «зарплата». Он похож на массив, за исключением того, что индексация выполняется с помощью произвольных ключей любого типа объекта, а не целочисленного индекса. Порядок, в котором вы проходите хэш по ключу или по значению, может показаться произвольным и, как правило, не соответствует порядку вставки. Если вы попытаетесь получить доступ к хешу с ключом, которого не существует, метод вернет nil. Хэши, подобно массивам, являются в Ruby основной структурой данных.

Создание хешей:

Как и в случае с массивами, существует множество способов создания хэшей. Вы можете создать пустой хеш с помощью метода класса new:

month = Hash.new

Вы также можете использовать new для создания хеша со значением по умолчанию, которое в противном случае просто nil:

month = Hash.new ( "month" )

or

months = Hash.new "month"

Когда вы получаете доступ к любому ключу в хэше, который имеет значение по умолчанию, если ключ или значение не существует, доступ к хешу вернет значение по умолчанию:

#!/usr/bin/ruby

​​months = Hash.new ( "month" )

puts "#{months [0]}"

puts "#{months [72]}"

Это даст следующий результат:

month

month

#!/usr/bin/ruby

​​H = Hash["a" => 100, "b" => 200]

puts "#{H[ 'a' ] }"

puts "#{H[ 'b' ] } "

Это даст следующий результат:

100

200

Вы можете использовать любой объект Ruby в качестве ключа или значения, даже массив, поэтому следующий пример является допустимым:

[1, "jan"] => "Январь"

Встроенные методы хеширования:

Нам нужен экземпляр объекта Hash для вызова метода Hash. Как мы видели, следующий способ создания экземпляра объекта Hash:

Hash [ [key => |, value] *] or

Hash.new [or] Hash.new(obj) [or]

Hash.new { |hash, key| block}

Это вернет новый хэш, заполненный данными объектами. Теперь, используя созданный объект, мы можем вызывать любые доступные методы экземпляра. Например:

#!/usr/bin/ruby

​​$ , = ", "

months = Hash.new ( "month" )

months = {"1" => "January", "2" => "February"}

keys = months.keys

puts "#{keys}"

Это даст следующий результат:

2, 1

Ниже приведены общедоступные методы хеширования (при условии, что hash - это объект массива):

SN Methods with Description


1 hash == other_hashПроверяет, равны ли два хэша, на основании того, имеют ли они одинаковое количество пар ключ-значение и соответствуют ли пары ключ- значение соответствующей паре в каждом хэше. 2 hash.[key]Используя ключ, ссылается на значение из хеша. Если ключ не найден, возвращается значение по умолчанию. 3 hash. [Key]=valueСвязывает значение параметра value с ключом key.4 hash.clearУдаляет все пары ключ-значение из hash.5 hash.default (key = nil)Возвращает значение по умолчанию для hash, nil, если не установлено по умолчанию =. ([] возвращает значение по умолчанию, если ключ не существует в хэше.) 6 hash.default = objУстанавливает значение по умолчанию для hash.7 hash.default_procВозвращает блок, если хеш был создан блоком. 8 hash.delete (ключ) [or]array.delete (key) {|key| block}Удаляет пару ключ-значение из хеша по ключу. Если используется блок, возвращает результат блока, если пара не найдена. Сравнить delete_if.9 hash.delete_if { |key, value| block} Удаляет пару "ключ-значение" из хэша для каждой пары, которую блок оценивает как истину.10 hash.each { |key, value| block}Итерирует по хешу, вызывая блок один раз для каждого ключа, передавая значение ключа в виде двухэлементного массива.11 hash.each_key { |key| block}Итерирует по хешу, вызывая блок один раз для каждого ключа, передавая ключ в качестве параметра. 12 hash.each_key { |key_value_array| block}Итерирует по хешу, вызывая блок один раз для каждого ключа, передавая ключ и значение в качестве параметров. 13 hash.each_key {|value| block}Итерирует по хешу, вызывая блок один раз для каждого ключа, передавая значение в качестве параметра. 14 hash.empty?Проверяет, является ли хеш пустым (не содержит пар ключ-значение), возвращает true или false. 15 hash.fetch(key [, default]) [or]hash.fetch(key) { |key| block}Возвращает значение из хеша для данного ключа. Если ключ не может быть найден и других аргументов нет, возникает исключение IndexError; если задан default, он возвращается; если указан необязательный блок, возвращается его результат. 16 hash.has_key?(key) [or] hash.include?(key) [or]hash.key?(key) [or] hash.member?(key)Проверяет, присутствует ли данный ключ в хэше, возвращая true или false. 17 hash.has_value?(value)Проверяет, содержит ли хэш заданное значение. 18 hash.index(value)Возвращает ключ для заданного значения в хэше, nil, если совпадающего значения не найдено. 19 hash.indexes(keys)Возвращает новый массив, состоящий из значений для данного ключа (ов). Вставит значение по умолчанию для ключей, которые не найдены. Этот метод устарел. Используйте select.20 hash.indices(keys)Возвращает новый массив, состоящий из значений для данного ключа (ов). Вставит значение по умолчанию для ключей, которые не найдены. Этот метод устарел. Используйте select.21 hash.inspectВозвращает версию hash, в виде красивой строки для печати22 hash.invert Создает новый хеш, инвертируя ключи и значения из хеша; то есть в новом хэше ключи из hash становятся значениями, а значения становятся ключами. 23 hash.keysСоздает новый массив с ключами из hash.24 hash.lengthВозвращает размер или длину хеша в виде целого числа. 25 hash.merge(other_hash) [or]hash.merge (other_hash) { |key, oldval, newval| block}Возвращает новый хеш, содержащий содержимое hash и other_hash, перезаписывая пары в хэше с повторяющимися ключами ключами из other_hash.26 hash.merge!(Other_hash) [or]hash.merge!(other_hash) { |key, oldval, newval| block}То же, что и слияние, но изменения выполняются на месте.27 hash.rehashПерестраивает хеш на основе текущих значений для каждого ключа. Если значения изменились с момента их вставки, этот метод переиндексирует hash.28 hash.reject { |key, value| block}Создает новый хэш для каждой пары, которую блок оценивает как true29 hash.reject! { |key, value| block}То же, что и reject, но изменения вносятся на место. 30 hash.replace(other_hash)Заменяет содержимое hash на содержимое other_ hash.31 hash.select {|key, value| block}Возвращает новый массив, состоящий из пар ключ-значение из хэша, для которого блок возвращает true. 32 hash.shiftУдаляет пару ключ-значение из хеша, возвращая его в виде двухэлементного массива.33 hash.sizeВозвращает размер или длину хеша в виде целого числа. 34 hash.sortПреобразует хэш в двумерный массив, содержащий массивы пар ключ-значение, затем сортирует его как массив. 35 hash.store(key, value)Хранит пару ключ-значение в hash.36 hash.to_aСоздает двумерный массив из хэша. Каждая пара ключ / значение преобразуется в массив, и все эти массивы хранятся в содержащем массиве. 37 hash.to_hashВозвращает hash (self) .38 hash.to_sПреобразует хэш в массив, затем преобразует этот массив в строку. 39 hash.update(other_hash) [or]hash.update(other_hash) {|key, oldval, newval| block}Возвращает новый хеш, содержащий содержимое hash и other_hash, перезаписывая пары в hash с повторяющимися ключами ключами из other_hash.40 hash.value? (value)Проверяет, содержит ли хэш заданное значение. 41 hash.valuesВозвращает новый массив, содержащий все значения hash.42 hash.values_at(obj, ...)Возвращает новый массив, содержащий значения из хеш-го