Ruby Hash

Хеш — это коллекция пар «ключ-значение», например "key" => "value". Хеши похожи на массивы, за исключением того, что их индексы не ограничиваются числами.

Индексы хеша (или «ключи») могут быть почти любым объектом.

Хотя хеш похож на массив, есть важное отличие: элементы хеша не имеют определённого порядка. Если порядок важен, следует использовать массив.

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

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

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" => 100, "b" => 200] puts "#{H['a']}" puts "#{H['b']}"

Попробуйте »

Вывод приведенного выше примера:

100
200

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

[1,"jan"] => "January"

Встроенные методы Hash

Чтобы вызывать методы 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"]

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

Нет.Метод и описание
1hash == other_hash
Проверяет, имеют ли два хэша одинаковое количество пар ключ-значение и совпадают ли пары ключ-значение друг с другом, чтобы определить, равны ли два хэша.
2hash[key]
Использует ключ для получения значения из хэша. Если ключ не найден, возвращает значение по умолчанию.
3hash[key]=value
holdvalueДанное значение связывается сkeyданным ключом.
4hash.clear
Удаляет все пары ключ-значение из хэша.
5hash.default(key = nil)
Возвращаетhashзначение по умолчанию хэша или nil, если оно не задано через default=. (Если ключ отсутствует вhashхэше, [] возвращает значение по умолчанию.)
6hash.default = obj
— этоhashУстанавливает значение по умолчанию.
7hash.default_proc
Еслиhashхэш был создан с блоком, возвращает блок.
8hash.delete(key) [или]
array.delete(key) { |key| block }

Удаляетkeyизhashпары ключ-значение из хэша по ключу. Если используется блок и соответствующая пара ключ-значение не найдена, возвращает результат блока. Сравните сdelete_ifdelete_if.
9hash.delete_if { |key,value| block }
Для каждого блока, гдеtrueвычисляется как true, удаляет пары key-value изhashhash.
10hash.each { |key,value| block }
Перебираетhashhash, для каждогоkeyвызывает блок один раз, передавая key-value как двухэлементный массив.
11hash.each_key { |key| block }
Перебираетhashhash, для каждогоkeyвызывает блок один раз, передаваяkeykey как аргумент.
12hash.each_key { |key_value_array| block }
Перебираетhashhash, для каждогоkeyвызывает блок один раз, передаваяkeyиvaluevalue как аргумент.
13hash.each_value { |value| block }
Перебираетhashhash, для каждогоkeyвызывает блок один раз, передаваяvaluekey-value как аргументы.
14hash.empty?
Проверяет, пуст ли хеш (не содержит пар ключ-значение), возвращаетtrueилиfalse。
15hash.fetch(key [, default] ) [или]
hash.fetch(key) { | key | block }

Для заданногоkeyизhashkey, возвращает значение. Если не найденkeyи не переданы другие аргументы, вызывает исключениеIndexError; если заданdefaultdefault, возвращаетdefaultdefault; если указан необязательный блок, возвращает результат блока.
16hash.has_key?(key) [или] hash.include?(key) [или]
hash.key?(key) [или] hash.member?(key)

Проверяет, существует ли заданныйkeykey в хеше, возвращаетtrueилиfalse。
17hash.has_value?(value)
Проверяет, содержит ли хеш заданноеvalue。
18hash.index(value)
Для заданногозначениязначение, возвращает ключ в хэшеkey, если соответствующее значение не найдено, возвращает nil.nil。
19hash.indexes(keys)
Возвращает новый массив, состоящий из значений для заданных ключей. Для не найденных ключей будет вставлено значение по умолчанию. Этот метод устарел; используйте select.
20hash.indices(keys)
Возвращает новый массив, состоящий из значений для заданных ключей. Для не найденных ключей будет вставлено значение по умолчанию. Этот метод устарел; используйте select.
21hash.inspect
Возвращает пригодную для печати строковую версию хэша.
22hash.invert
Создаёт новыйхэшхэш, инвертируяхэшключи/значения включиизначенияhash. То есть, в новом hash,hashключи в hash станут значениями, а значения станут ключами.
23hash.keys
Создаёт новый массив, содержащий ключи вhashhash.
24hash.length
Возвращает размер или длинуhashhash как целое число.
25hash.merge(other_hash) [или]
hash.merge(other_hash) { |key, oldval, newval| block }

Возвращает новый hash, содержащий содержимоеhashиother_hashhash, перезаписывая пары ключ-значение в hash, имеющие дублирующиеся ключи, сother_hashother_hash.
26hash.merge!(other_hash) [или]
hash.merge!(other_hash) { |key, oldval, newval| block }

То же, что и merge, но hash фактически изменяется.
27hash.rehash
Перестраивает hash на основе текущего значения каждогоkeykey. Если значения изменяются после вставки, этот метод переиндексируетhashhash.hash。
28hash.reject { |key, value| block }
Аналогично delete_if, но работает с копией hash. Эквивалентно hsh.dup.delete_if.
29hash.reject! { |key, value| block }
Эквивалентно delete_if, но возвращает nil, если изменения не вносятся.
30hash.replace(other_hash)
держатьhashЗаменяет содержимоеother_hashhash содержимым
31hash.select { |key, value| block }
Возвращает новый массив, состоящий изblockпар ключ-значение вtrueизhashhash.
32hash.shift
изhashУдаляет пару ключ-значение из hash и возвращает её в виде массива из двух элементов.
33hash.size
Возвращает размер или длинуhashотsizehash в виде целого числа.
34hash.sort
holdhashПреобразует в двумерный массив, содержащий массивы пар ключ-значение, затем сортирует его.
35hash.store(key, value)
Сохраняетhashпару ключ-значение в hash.
36hash.to_a
Создает двумерный массив из hash. Каждая пара ключ-значение преобразуется в массив, и все эти массивы сохраняются в одном массиве.
37hash.to_hash
Возвращаетhash(self)。
38hash.to_s
holdhashhash преобразован в массив, затем этот массив преобразован в строку.
39hash.update(other_hash) [или]
hash.update(other_hash) {|key, oldval, newval| block}

Возвращает новый hash, содержащий содержимоеhashиother_hashhash, перезаписываяhashпары ключ-значение в hash, которые имеют дублирующиеся ключи сother_hashother_hash.
40hash.value?(value)
Проверяет, содержит лиhashhash заданноеvalue。
41hash.values
Возвращает новый массив, содержащий все значенияhashhash.
42hash.values_at(obj, ...)
Возвращает новый массив, содержащий значения вhashhash, связанные с заданными ключами.
Другие расширения