Ruby Hash
Хеш — это коллекция пар «ключ-значение», например "key" => "value". Хеши похожи на массивы, за исключением того, что их индексы не ограничиваются числами.
Индексы хеша (или «ключи») могут быть почти любым объектом.
Хотя хеш похож на массив, есть важное отличие: элементы хеша не имеют определённого порядка. Если порядок важен, следует использовать массив.
Создание хешей
Как и с массивами, есть различные способы создания хеша. Можно создать пустой хеш с помощью классового методаnew:
Вы также можете использоватьnew, чтобы создать хеш со значением по умолчанию. Хеш без значения по умолчанию — этоnil:
Когда вы обращаетесь к любому ключу в хеше со значением по умолчанию, если ключ или значение не существует, хеш вернёт значение по умолчанию:
Пример
Попробуйте »
Вывод приведенного выше примера:
month month
Пример
Попробуйте »
Вывод приведенного выше примера:
100 200
Вы можете использовать любой объект Ruby в качестве ключа или значения и даже использовать массив, как показано в следующем примере:
Встроенные методы Hash
Чтобы вызывать методы Hash, сначала нужно создать экземпляр объекта Hash. Вот способы создания экземпляра объекта Hash:
Это возвращает новый хэш, заполненный заданным объектом. Теперь, используя созданный объект, мы можем вызвать любой доступный метод. Например:
Пример
Попробуйте »
Вывод приведенного выше примера:
["1", "2"]
Ниже перечислены публичные методы хэша (при условии, чтоhashhash — объект Hash):
| Нет. | Метод и описание |
|---|---|
| 1 | hash == other_hash Проверяет, имеют ли два хэша одинаковое количество пар ключ-значение и совпадают ли пары ключ-значение друг с другом, чтобы определить, равны ли два хэша. |
| 2 | hash[key] Использует ключ для получения значения из хэша. Если ключ не найден, возвращает значение по умолчанию. |
| 3 | hash[key]=value holdvalueДанное значение связывается сkeyданным ключом. |
| 4 | hash.clear Удаляет все пары ключ-значение из хэша. |
| 5 | hash.default(key = nil) Возвращаетhashзначение по умолчанию хэша или nil, если оно не задано через default=. (Если ключ отсутствует вhashхэше, [] возвращает значение по умолчанию.) |
| 6 | hash.default = obj — этоhashУстанавливает значение по умолчанию. |
| 7 | hash.default_proc Еслиhashхэш был создан с блоком, возвращает блок. |
| 8 | hash.delete(key) [или] array.delete(key) { |key| block } Удаляетkeyизhashпары ключ-значение из хэша по ключу. Если используется блок и соответствующая пара ключ-значение не найдена, возвращает результат блока. Сравните сdelete_ifdelete_if. |
| 9 | hash.delete_if { |key,value| block } Для каждого блока, гдеtrueвычисляется как true, удаляет пары key-value изhashhash. |
| 10 | hash.each { |key,value| block } Перебираетhashhash, для каждогоkeyвызывает блок один раз, передавая key-value как двухэлементный массив. |
| 11 | hash.each_key { |key| block } Перебираетhashhash, для каждогоkeyвызывает блок один раз, передаваяkeykey как аргумент. |
| 12 | hash.each_key { |key_value_array| block } Перебираетhashhash, для каждогоkeyвызывает блок один раз, передаваяkeyиvaluevalue как аргумент. |
| 13 | hash.each_value { |value| block } Перебираетhashhash, для каждогоkeyвызывает блок один раз, передаваяvaluekey-value как аргументы. |
| 14 | hash.empty? Проверяет, пуст ли хеш (не содержит пар ключ-значение), возвращаетtrueилиfalse。 |
| 15 | hash.fetch(key [, default] ) [или] hash.fetch(key) { | key | block } Для заданногоkeyизhashkey, возвращает значение. Если не найденkeyи не переданы другие аргументы, вызывает исключениеIndexError; если заданdefaultdefault, возвращаетdefaultdefault; если указан необязательный блок, возвращает результат блока. |
| 16 | hash.has_key?(key) [или] hash.include?(key) [или] hash.key?(key) [или] hash.member?(key) Проверяет, существует ли заданныйkeykey в хеше, возвращаетtrueилиfalse。 |
| 17 | hash.has_value?(value) Проверяет, содержит ли хеш заданноеvalue。 |
| 18 | hash.index(value) Для заданногозначениязначение, возвращает ключ в хэшеkey, если соответствующее значение не найдено, возвращает nil.nil。 |
| 19 | hash.indexes(keys) Возвращает новый массив, состоящий из значений для заданных ключей. Для не найденных ключей будет вставлено значение по умолчанию. Этот метод устарел; используйте select. |
| 20 | hash.indices(keys) Возвращает новый массив, состоящий из значений для заданных ключей. Для не найденных ключей будет вставлено значение по умолчанию. Этот метод устарел; используйте select. |
| 21 | hash.inspect Возвращает пригодную для печати строковую версию хэша. |
| 22 | hash.invert Создаёт новыйхэшхэш, инвертируяхэшключи/значения включиизначенияhash. То есть, в новом hash,hashключи в hash станут значениями, а значения станут ключами. |
| 23 | hash.keys Создаёт новый массив, содержащий ключи вhashhash. |
| 24 | hash.length Возвращает размер или длинуhashhash как целое число. |
| 25 | hash.merge(other_hash) [или] hash.merge(other_hash) { |key, oldval, newval| block } Возвращает новый hash, содержащий содержимоеhashиother_hashhash, перезаписывая пары ключ-значение в hash, имеющие дублирующиеся ключи, сother_hashother_hash. |
| 26 | hash.merge!(other_hash) [или] hash.merge!(other_hash) { |key, oldval, newval| block } То же, что и merge, но hash фактически изменяется. |
| 27 | hash.rehash Перестраивает hash на основе текущего значения каждогоkeykey. Если значения изменяются после вставки, этот метод переиндексируетhashhash.hash。 |
| 28 | hash.reject { |key, value| block } Аналогично delete_if, но работает с копией hash. Эквивалентно hsh.dup.delete_if. |
| 29 | hash.reject! { |key, value| block } Эквивалентно delete_if, но возвращает nil, если изменения не вносятся. |
| 30 | hash.replace(other_hash) держатьhashЗаменяет содержимоеother_hashhash содержимым |
| 31 | hash.select { |key, value| block } Возвращает новый массив, состоящий изblockпар ключ-значение вtrueизhashhash. |
| 32 | hash.shift изhashУдаляет пару ключ-значение из hash и возвращает её в виде массива из двух элементов. |
| 33 | hash.size Возвращает размер или длинуhashотsizehash в виде целого числа. |
| 34 | hash.sort holdhashПреобразует в двумерный массив, содержащий массивы пар ключ-значение, затем сортирует его. |
| 35 | hash.store(key, value) Сохраняетhashпару ключ-значение в hash. |
| 36 | hash.to_a Создает двумерный массив из hash. Каждая пара ключ-значение преобразуется в массив, и все эти массивы сохраняются в одном массиве. |
| 37 | hash.to_hash Возвращаетhash(self)。 |
| 38 | hash.to_s holdhashhash преобразован в массив, затем этот массив преобразован в строку. |
| 39 | hash.update(other_hash) [или] hash.update(other_hash) {|key, oldval, newval| block} Возвращает новый hash, содержащий содержимоеhashиother_hashhash, перезаписываяhashпары ключ-значение в hash, которые имеют дублирующиеся ключи сother_hashother_hash. |
| 40 | hash.value?(value) Проверяет, содержит лиhashhash заданноеvalue。 |
| 41 | hash.values Возвращает новый массив, содержащий все значенияhashhash. |
| 42 | hash.values_at(obj, ...) Возвращает новый массив, содержащий значения вhashhash, связанные с заданными ключами. |