Последние новости:

Поиск по сайту:

Лучше щепоть с покоем, чем пригоршня с трудом и томлением духа (Соломон).

Ruby — Хеши

1 мин для чтения
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
01.08.2018
Ruby - Хеши

Хэш представляет собой набор пар ключ-значение, например: «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"]

 

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

Методы и описание
1hash == other_hash

Проверяет, равны ли два хеша, на основе того, имеют ли они одинаковое количество пар ключ-значение и соответствуют ли пары ключ-значение соответствующей паре в каждом хеше.

2hash. [ключ]

Используя ключ, ссылается на значение из хэша. Если ключ не найден, возвращается значение по умолчанию.

3hash. [ключ] = значение

Связывает значение, заданное значение, с ключом, заданным ключ.

4hash.clear

Удаляет все пары ключ-значение из хэша.

5hash.default (key = nil)

Возвращает значение по умолчанию для hash, nil, если не установлено по умолчанию =. ([] возвращает значение по умолчанию, если ключ не существует в хеше.)

6hash.default = obj

Устанавливает значение по умолчанию для хэша.

7hash.default_proc

Возвращает блок, если хэш был создан блоком.

8hash.delete (ключ) [или]

array.delete (ключ) {| ключ | блок}

Удаляет пару ключ-значение из хэша по ключу . Если используется блок, возвращает результат блока, если пара не найдена. Сравните delete_if .

9hash.delete_if {| ключ, значение | блок}

Удаляет пару «ключ-значение» из хэша для каждой пары, блок оценивает значение « истина» .

10hash.each {| ключ, значение | блок}

Итерирует через хэш, вызывая блок один раз для каждого ключа, передавая значение ключа в виде двухэлементного массива.

11hash.each_key {| ключ | блок}

Итерирует через хэш, вызывая блок один раз для каждого ключа, передавая ключ в качестве параметра.

12hash.each_key {| key_value_array | блок}

Итерирует через хэш, вызывая блок один раз для каждого ключа, передавая ключ и значение в качестве параметров.

13hash.each_key {| значение | блок}

Итерирует через хэш, вызывая блок один раз для каждого ключа, передавая значение в качестве параметра.

14hash.empty?

Проверяет, пуст ли хэш (не содержит пар ключ-значение), возвращает true или false.

15hash.fetch (ключ [, по умолчанию]) [или]

hash.fetch (ключ) {| ключ | блок}

Возвращает значение из хэша для данного ключа . Если ключ не найден и нет других аргументов, он вызывает исключение IndexError ; если задано значение по умолчанию, оно возвращается; если указан дополнительный блок, возвращается его результат.

16hash.has_key? (ключ) [или] hash.include? (ключ) [или]

hash.key? (ключ) [или] hash.member? (ключ)

Проверяет, присутствует ли данный ключ в хеше, возвращая true или false .

17hash.has_value? (значение)

Проверяет, содержит ли хэш заданное значение .

18hash.index (значение)

Возвращает ключ для заданного значения в хеш, ноль, если совпадающее значение не найдено.

19hash.indexes (ключи)

Возвращает новый массив, состоящий из значений для данного ключа (ов). Введет значение по умолчанию для ключей, которые не найдены. Этот метод устарел. Используйте select.

20hash.indices (ключи)

Возвращает новый массив, состоящий из значений для данного ключа (ов). Введет значение по умолчанию для ключей, которые не найдены. Этот метод устарел. Используйте select.

21hash.inspect

Возвращает красивую строку с хэш-строкой.

22hash.invert

Создает новый хеш, инвертируя ключи и значения из хэша ; то есть в новом хэше ключи от хеша становятся значениями, а значения становятся ключами.

23hash.keys

Создает новый массив с ключами из хэша .

24hash.length

Возвращает размер или длину хеша в виде целого числа.

25hash.merge (other_hash) [или]

hash.merge (other_hash) {| ключ, старое_значение, новое_значение | блок}

Возвращает новый хеш, содержащий содержимое хэша и other_hash, переписывание пар в хеше с повторяющимися ключами с символами other_hash .

26hash.merge! (other_hash) [или]

hash.merge! (other_hash) {| ключ, старое_значение, новое_значение | блок}

То же, что и слияние, но изменения выполняются на месте.

27hash.rehash

Перестраивает хэш на основе текущих значений для каждого ключа . Если значения были изменены с момента их установки, этот метод повторно индексирует хеш .

28hash.reject {| ключ, значение | блок}

Создает новый хеш для каждой пары, блок оценивает значение true

29hash.reject! {| ключ, значение | блок}

То же, что отклонение, но изменения сделаны на месте.

30hash.replace (other_hash)

Заменяет содержимое хэша содержимым other_hash.

31hash.select {| ключ, значение | блок}

Возвращает новый массив, состоящий из пар ключ-значение из хэша, для которого блок возвращает true.

32hash.shift

Удаляет пару ключ-значение из хэша, возвращая его как двухэлементный массив.

33hash.size

Возвращает размер или длину хеша в виде целого числа.

34hash.sort

Преобразует хэш в двумерный массив, содержащий массивы пар ключ-значение, а затем сортирует его как массив.

35hash.store (ключ, значение)

Сохраняет пару ключевых значений в хеше .

36hash.to_a

Создает двумерный массив из хэша. Каждая пара ключей / значений преобразуется в массив, и все эти массивы хранятся в содержащем массиве.

37hash.to_hash

Возвращает hash (self).

38hash.to_s

Преобразует хэш в массив, а затем преобразует этот массив в строку.

39hash.update (other_hash) [или]

hash.update (other_hash) {| ключ, старое_значение, новое_значение | блок}

Возвращает новый хеш, содержащий содержимое хэша и other_hash, переписывание пар в хеше с повторяющимися ключами с символами other_hash.

40hash.value? (значение)

Проверяет, содержит ли хэш заданное значение.

41hash.values

Возвращает новый массив, содержащий все значения хэша.

42hash.values_at (obj, …)

Возвращает новый массив, содержащий значения из хэша, связанные с данным ключом или ключами.

 

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Если статья понравилась, то поделитесь ей в социальных сетях:

Читайте также

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Статьи партнеров:

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам:

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить

Спасибо! Ваша заявка принята

close

Спасибо! Ваша заявка принята

close