Рубин - Хеши
Хеш - это набор таких пар ключ-значение: «сотрудник» => «зарплата». Он похож на массив, за исключением того, что индексация выполняется с помощью произвольных ключей любого типа объекта, а не целочисленного индекса.
Порядок, в котором вы проходите хэш по ключу или значению, может показаться произвольным и, как правило, не соответствует порядку вставки. Если вы попытаетесь получить доступ к хешу с ключом, который не существует, метод вернет 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
month
#!/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"]
Ниже приведены общедоступные методы хеширования (при условии, что хеш является объектом массива).
Sr.No. | Методы и описание |
---|---|
1 | hash == other_hash Проверяет, равны ли два хэша, основываясь на том, одинаково ли у них количество пар ключ-значение и соответствуют ли пары ключ-значение соответствующей паре в каждом хеше. |
2 | hash.[key] Используя ключ, ссылается на значение из хеша. Если ключ не найден, возвращает значение по умолчанию. |
3 | hash.[key] = value Связывает значение, заданное параметром value, с ключом, заданным параметром key . |
4 | hash.clear Удаляет все пары ключ-значение из хеша. |
5 | hash.default(key = nil) Возвращает значение по умолчанию для хэша , nil, если по умолчанию не установлено =. ([] возвращает значение по умолчанию, если ключ не существует в хэше .) |
6 | hash.default = obj Устанавливает значение по умолчанию для хеша . |
7 | hash.default_proc Возвращает блок, если хеш был создан блоком. |
8 | hash.delete(key) [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? Проверяет, является ли хеш пустым (не содержит пар ключ-значение), возвращает истину или ложь . |
15 | hash.fetch(key [, default] ) [or] hash.fetch(key) { | key | block } Возвращает значение из хеша для данного ключа . Если ключ не может быть найден и других аргументов нет, возникает исключение IndexError ; если задано значение по умолчанию , оно возвращается; если указан необязательный блок, возвращается его результат. |
16 | hash.has_key?(key) [or] hash.include?(key) [or] hash.key?(key) [or] hash.member?(key) Проверяет, присутствует ли данный ключ в хэше, возвращая истину или ложь . |
17 | hash.has_value?(value) Проверяет, содержит ли хэш заданное значение . |
18 | hash.index(value) Возвращает ключ для заданного значения в хэше, nil, если подходящего значения не найдено. |
19 | hash.indexes(keys) Возвращает новый массив, состоящий из значений для данного ключа (ключей). Вставит значение по умолчанию для ключей, которые не найдены. Этот метод устарел. Используйте select. |
20 | hash.indices(keys) Возвращает новый массив, состоящий из значений для данного ключа (ключей). Вставит значение по умолчанию для ключей, которые не найдены. Этот метод устарел. Используйте select. |
21 год | hash.inspect Возвращает версию хэша в виде красивой строки для печати. |
22 | hash.invert Создает новый хеш , инвертируя ключи и значения из хеша ; то есть в новом хэше ключи от хеша становятся значениями, а значения становятся ключами. |
23 | hash.keys Создает новый массив с ключами из хэша . |
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 Восстанавливает хэш на основе текущих значений для каждого ключа . Если значения изменились с момента их вставки, этот метод переиндексирует хэш . |
28 | hash.reject { |key, value| block } Создает новый хеш для каждой пары, для которой блок оценивает значение true |
29 | hash.reject! { |key, value| block } То же, что и отклонение , но изменения вносятся на месте. |
30 | hash.replace(other_hash) Заменяет содержимое хэша содержимым other_hash . |
31 год | hash.select { |key, value| block } Возвращает новый массив, состоящий из пар ключ-значение из хеша, для которого блок возвращает истину . |
32 | hash.shift Удаляет пару "ключ-значение" из хэша , возвращая ее как двухэлементный массив. |
33 | hash.size Возвращает размер или длину хеша в виде целого числа. |
34 | hash.sort Преобразует хэш в двумерный массив, содержащий массивы пар ключ-значение, а затем сортирует его как массив. |
35 год | hash.store(key, value) Хранит пару "ключ-значение" в хэше . |
36 | hash.to_a Создает двумерный массив из хэша. Каждая пара ключ / значение преобразуется в массив, и все эти массивы хранятся в содержащем массиве. |
37 | hash.to_hash Возвращает хэш (себя). |
38 | hash.to_s Преобразует хэш в массив, а затем преобразует этот массив в строку. |
39 | hash.update(other_hash) [or] hash.update(other_hash) {|key, oldval, newval| block} Возвращает новый хеш, содержащий содержимое hash и other_hash , перезаписывая пары в хеше с дублирующимися ключами ключами из other_hash . |
40 | hash.value?(value) Проверяет, содержит ли хэш заданное значение . |
41 год | hash.values Возвращает новый массив, содержащий все значения хэша . |
42 | hash.values_at(obj, ...) Возвращает новый массив, содержащий значения из хеша , связанные с данным ключом или ключами. |