English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Ruby Основы

Ruby Уровень продвинутый

Хеши (Hash) в Ruby

Хэш (Hash) - это набор пар "ключ" => "значение". Хэш подобен массиву, только его индексы не ограничиваются числами.

Индекс хэша (или "ключ") может быть почти любым объектом.

Хэш, хотя и ähnlich wie Arrays, hat einen wichtigen Unterschied: Die Elemente eines Hash haben keine bestimmte Reihenfolge. Wenn die Reihenfolge wichtig ist, verwenden Sie besser ein Array.

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

Как и массивы, хэши можно создавать различными способами. Вы можете через 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[[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 является Hash объектом):

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

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

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

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

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

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

Возвращает новый хеш, содержащий hash и other_hash содержимым, переписать hash с other_hash Со значениями ключей, повторяющимися.
40hash.value?(value)
Проверка hash 是否包含给定的 value.
41hash.values
Возвращает новый массив, содержащий hash всех значений.
42hash.values_at(obj, ...)
Возвращает новый массив, содержащий hash Worth noting is the value associated with the given key.