Хэш представляет собой набор пар ключ-значение, например: «employee» => «зарплата». Он похож на Массив, за исключением того, что индексирование выполняется с помощью произвольных ключей любого типа объекта, а не целочисленного индекса.
Порядок, в котором вы пересекаете хэш с помощью ключа или значения, может показаться произвольным и, как правило, не будет в порядке ввода. Если вы попытаетесь получить доступ к хэшу с ключом, который не существует, метод вернет nil.
Как и в случае с массивами, существует множество способов создания хэшей. Вы можете создать пустой хэш с новым методом класса:
months = Hash.new
Вы также можете использовать new для создания хэша со значением по умолчанию, которое иначе равно nil:
months = Hash.new( "month" ) или 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" => 50, "b" => 80] puts "#{H['a']}" puts "#{H['b']}"
Это приведет к следующему результату:
50 80
Вы можете использовать любой объект 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" => "Январь", "2" => "Февраль"} keys = months.keys puts "#{keys}"
Это приведет к следующему результату:
["1", "2"]
Ниже приведены общедоступные хэш-методы (предполагая, что хеш — объект массива) —
№ | Методы и описание |
---|---|
1 | hash == other_hash Проверяет, равны ли два хеша, на основе того, имеют ли они одинаковое количество пар ключ-значение и соответствуют ли пары ключ-значение соответствующей паре в каждом хеше. |
2 | hash. [ключ] Используя ключ, ссылается на значение из хэша. Если ключ не найден, возвращается значение по умолчанию. |
3 | hash. [ключ] = значение Связывает значение, заданное значение, с ключом, заданным ключ. |
4 | hash.clear Удаляет все пары ключ-значение из хэша. |
5 | hash.default (key = nil) Возвращает значение по умолчанию для hash, nil, если не установлено по умолчанию =. ([] возвращает значение по умолчанию, если ключ не существует в хеше.) |
6 | hash.default = obj Устанавливает значение по умолчанию для хэша. |
7 | hash.default_proc Возвращает блок, если хэш был создан блоком. |
8 | hash.delete (ключ) [или] array.delete (ключ) {| ключ | блок} Удаляет пару ключ-значение из хэша по ключу . Если используется блок, возвращает результат блока, если пара не найдена. Сравните delete_if . |
9 | hash.delete_if {| ключ, значение | блок} Удаляет пару «ключ-значение» из хэша для каждой пары, блок оценивает значение « истина» . |
10 | hash.each {| ключ, значение | блок} Итерирует через хэш, вызывая блок один раз для каждого ключа, передавая значение ключа в виде двухэлементного массива. |
11 | hash.each_key {| ключ | блок} Итерирует через хэш, вызывая блок один раз для каждого ключа, передавая ключ в качестве параметра. |
12 | hash.each_key {| key_value_array | блок} Итерирует через хэш, вызывая блок один раз для каждого ключа, передавая ключ и значение в качестве параметров. |
13 | hash.each_key {| значение | блок} Итерирует через хэш, вызывая блок один раз для каждого ключа, передавая значение в качестве параметра. |
14 | hash.empty? Проверяет, пуст ли хэш (не содержит пар ключ-значение), возвращает true или false. |
15 | hash.fetch (ключ [, по умолчанию]) [или] hash.fetch (ключ) {| ключ | блок} Возвращает значение из хэша для данного ключа . Если ключ не найден и нет других аргументов, он вызывает исключение IndexError ; если задано значение по умолчанию, оно возвращается; если указан дополнительный блок, возвращается его результат. |
16 | hash.has_key? (ключ) [или] hash.include? (ключ) [или] hash.key? (ключ) [или] hash.member? (ключ) Проверяет, присутствует ли данный ключ в хеше, возвращая true или false . |
17 | hash.has_value? (значение) Проверяет, содержит ли хэш заданное значение . |
18 | hash.index (значение) Возвращает ключ для заданного значения в хеш, ноль, если совпадающее значение не найдено. |
19 | hash.indexes (ключи) Возвращает новый массив, состоящий из значений для данного ключа (ов). Введет значение по умолчанию для ключей, которые не найдены. Этот метод устарел. Используйте select. |
20 | hash.indices (ключи) Возвращает новый массив, состоящий из значений для данного ключа (ов). Введет значение по умолчанию для ключей, которые не найдены. Этот метод устарел. Используйте select. |
21 | hash.inspect Возвращает красивую строку с хэш-строкой. |
22 | hash.invert Создает новый хеш, инвертируя ключи и значения из хэша ; то есть в новом хэше ключи от хеша становятся значениями, а значения становятся ключами. |
23 | hash.keys Создает новый массив с ключами из хэша . |
24 | hash.length Возвращает размер или длину хеша в виде целого числа. |
25 | hash.merge (other_hash) [или] hash.merge (other_hash) {| ключ, старое_значение, новое_значение | блок} Возвращает новый хеш, содержащий содержимое хэша и other_hash, переписывание пар в хеше с повторяющимися ключами с символами other_hash . |
26 | hash.merge! (other_hash) [или] hash.merge! (other_hash) {| ключ, старое_значение, новое_значение | блок} То же, что и слияние, но изменения выполняются на месте. |
27 | hash.rehash Перестраивает хэш на основе текущих значений для каждого ключа . Если значения были изменены с момента их установки, этот метод повторно индексирует хеш . |
28 | hash.reject {| ключ, значение | блок} Создает новый хеш для каждой пары, блок оценивает значение true |
29 | hash.reject! {| ключ, значение | блок} То же, что отклонение, но изменения сделаны на месте. |
30 | hash.replace (other_hash) Заменяет содержимое хэша содержимым other_hash. |
31 | hash.select {| ключ, значение | блок} Возвращает новый массив, состоящий из пар ключ-значение из хэша, для которого блок возвращает true. |
32 | hash.shift Удаляет пару ключ-значение из хэша, возвращая его как двухэлементный массив. |
33 | hash.size Возвращает размер или длину хеша в виде целого числа. |
34 | hash.sort Преобразует хэш в двумерный массив, содержащий массивы пар ключ-значение, а затем сортирует его как массив. |
35 | hash.store (ключ, значение) Сохраняет пару ключевых значений в хеше . |
36 | hash.to_a Создает двумерный массив из хэша. Каждая пара ключей / значений преобразуется в массив, и все эти массивы хранятся в содержащем массиве. |
37 | hash.to_hash Возвращает hash (self). |
38 | hash.to_s Преобразует хэш в массив, а затем преобразует этот массив в строку. |
39 | hash.update (other_hash) [или] hash.update (other_hash) {| ключ, старое_значение, новое_значение | блок} Возвращает новый хеш, содержащий содержимое хэша и other_hash, переписывание пар в хеше с повторяющимися ключами с символами other_hash. |
40 | hash.value? (значение) Проверяет, содержит ли хэш заданное значение. |
41 | hash.values Возвращает новый массив, содержащий все значения хэша. |
42 | hash.values_at (obj, …) Возвращает новый массив, содержащий значения из хэша, связанные с данным ключом или ключами. |