Хеш — это набор пар ключ-значение, таких как: «employee» => «salary». Он похож на массив, за исключением того, что индексирование выполняется с помощью произвольных ключей любого типа объекта, а не целочисленного индекса.
Порядок, в котором вы пересекаете хеш по ключу или значению, может показаться произвольным и обычно не будет в порядке вставки. Если вы попытаетесь получить доступ к хешу с ключом, который не существует, метод вернет nil .
Создание хэшей
Как и в случае с массивами, существует множество способов создания хэшей. Вы можете создать пустой хеш с новым методом класса —
months = Hash.new
Вы также можете использовать new для создания хэша со значением по умолчанию, в противном случае просто nil —
months = Hash.new( "month" ) or months = Hash.new "month"
При доступе к любому ключу в хэше, который имеет значение по умолчанию, если ключ или значение не существует, доступ к хешу вернет значение по умолчанию —
#!/usr/bin/ruby months = Hash.new( "month" ) puts "#{months[0]}" puts "#{months[72]}"
Это даст следующий результат —
month monthLive Demo
#!/usr/bin/ruby H = Hash["a" => 100, "b" => 200] puts "#{H['a']}" puts "#{H['b']}"
Это даст следующий результат —
100 200
Вы можете использовать любой объект Ruby в качестве ключа или значения, даже массив, поэтому следующий пример является допустимым:
[1,"jan"] => "January"
Встроенные методы хэширования
Нам нужен экземпляр объекта 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}"
Это даст следующий результат —
["1", "2"]
Ниже приведены публичные методы хеширования (при условии, что хеш является объектом массива):
хэш == другой_хэш
Проверяет, равны ли два хэша, на основе того, имеют ли они одинаковое количество пар ключ-значение, и соответствуют ли пары ключ-значение соответствующей паре в каждом хэше.
хэш. [ключ]
Используя ключ, ссылается на значение из хэша. Если ключ не найден, возвращает значение по умолчанию.
хеш. [ключ] = значение
Связывает значение, заданное значением, с ключом, заданным ключом .
hash.clear
Удаляет все пары ключ-значение из хэша.
hash.default (ключ = ноль)
Возвращает значение по умолчанию для хэша , nil, если не установлено по умолчанию =. ([] возвращает значение по умолчанию, если ключ не существует в хэше .)
hash.default = obj
Устанавливает значение по умолчанию для хэша .
hash.default_proc
Возвращает блок, если хеш был создан блоком.
hash.delete (ключ) [или]
array.delete (key) {| ключ | блок}
Удаляет пару ключ-значение из хеша по ключу . Если используется блок, возвращает результат блока, если пара не найдена. Сравните delete_if .
hash.delete_if {| ключ, значение | блок}
Удаляет пару ключ-значение из хэша для каждой пары, для которой блок оценивается как true .
hash.each {| ключ, значение | блок}
Итерирует по хешу , вызывая блок один раз для каждого ключа, передавая значение ключа в виде двухэлементного массива.
hash.each_key {| ключ | блок}
Итерирует по хешу , вызывая блок один раз для каждого ключа, передавая ключ в качестве параметра.
hash.each_key {| key_value_array | блок}
Итерирует по хешу , вызывая блок один раз для каждого ключа , передавая ключ и значение в качестве параметров.
hash.each_key {| value | блок}
Итерирует по хешу , вызывая блок один раз для каждого ключа , передавая значение в качестве параметра.
hash.empty?
Проверяет, является ли хеш пустым (не содержит пар ключ-значение), возвращает true или false .
hash.fetch (ключ [, по умолчанию]) [или]
hash.fetch (ключ) {| ключ | блок}
Возвращает значение из хэша для данного ключа . Если ключ не может быть найден, и нет других аргументов, он вызывает исключение IndexError ; если задано значение по умолчанию , оно возвращается; если указан необязательный блок, возвращается его результат.
hash.has_key? (ключ) [или] hash.include? (ключ) [или]
hash.key? (ключ) [или] hash.member? (ключ)
Проверяет, присутствует ли данный ключ в хэше, возвращая true или false .
hash.has_value? (значение)
Проверяет, содержит ли хеш заданное значение .
hash.index (значение)
Возвращает ключ для заданного значения в хэше, nil, если не найдено подходящего значения.
hash.indexes (ключи)
Возвращает новый массив, состоящий из значений для данного ключа (ключей). Вставит значение по умолчанию для ключей, которые не найдены. Этот метод устарел. Используйте выбор.
hash.indices (ключи)
Возвращает новый массив, состоящий из значений для данного ключа (ключей). Вставит значение по умолчанию для ключей, которые не найдены. Этот метод устарел. Используйте выбор.
hash.inspect
Возвращает красивую строковую версию хэша.
hash.invert
Создает новый хеш , инвертируя ключи и значения из хеша ; то есть в новом хеше ключи из хэша становятся значениями, а значения становятся ключами.
hash.keys
Создает новый массив с ключами из хэша .
hash.length
Возвращает размер или длину хэша в виде целого числа.
hash.merge (other_hash) [или]
hash.merge (other_hash) {| ключ, oldval, newval | блок}
Возвращает новый хеш, содержащий содержимое хеша и other_hash , перезаписывая пары в хеш с дубликатами ключей с ключами из other_hash .
hash.merge! (other_hash) [или]
hash.merge! (other_hash) {| ключ, oldval, newval | блок}
То же, что слияние, но изменения выполняются на месте.
hash.rehash
Перестраивает хэш на основе текущих значений для каждого ключа . Если значения изменились с момента их вставки, этот метод переиндексирует хеш .
hash.reject {| ключ, значение | блок}
Создает новый хэш для каждой пары, блок оценивается как истинный
hash.reject! {| ключ, значение | блок}
То же самое, что отклонить , но изменения сделаны на месте.
hash.replace (other_hash)
Заменяет содержимое хеша на содержимое other_hash .
hash.select {| ключ, значение | блок}
Возвращает новый массив, состоящий из пар ключ-значение из хеша, для которого блок возвращает true .
hash.shift
Удаляет пару ключ-значение из хэша , возвращая ее в виде двухэлементного массива.
hash.size
Возвращает размер или длину хэша в виде целого числа.
hash.sort
Преобразует хэш в двумерный массив, содержащий массивы пар ключ-значение, а затем сортирует его как массив.
hash.store (ключ, значение)
Сохраняет пару ключ-значение в хэше .
hash.to_a
Создает двумерный массив из хеша. Каждая пара ключ / значение преобразуется в массив, и все эти массивы хранятся в содержащем массиве.
hash.to_hash
Возвращает хеш (self).
hash.to_s
Преобразует хеш в массив, затем преобразует этот массив в строку.
hash.update (other_hash) [или]
hash.update (other_hash) {| ключ, oldval, newval | блок}
Возвращает новый хеш, содержащий содержимое хеша и other_hash , перезаписывая пары в хеш с дубликатами ключей с ключами из other_hash .
hash.value? (значение)
Проверяет, содержит ли хеш заданное значение .
hash.values
Возвращает новый массив, содержащий все значения хеша .
hash.values_at (obj, …)
Возвращает новый массив, содержащий значения из хэша , которые связаны с данным ключом или ключами.