Читаем Crystal Programming. Введение на основе проекта в создание эффективных, безопасных и читаемых веб-приложений и приложений CLI полностью

Тип Hash представляет собой сопоставление ключей словаря со значениями. Ключи могут иметь любой тип, то же самое касается и значений. Единственное ограничение состоит в том, что каждый ключ может иметь только одно значение, хотя само значение может быть другим контейнером данных, например массивом.

Буквальный хэш создается как список пар ключ-значение внутри фигурных скобок ({...}). Ключ отделяется от значения символом =>. Например, вот самая большая численность населения в мире по странам, по данным Worldometer:

population = {

    "China" => 1_439_323_776,

    "India" => 1_380_004_385,

    "United States" => 331_002_651,

    "Indonesia" => 273_523_615,

    "Pakistan" => 220_892_340,

    "Brazil" => 212_559_417,

    "Nigeria" => 206_139_589,

    "Bangladesh" => 164_689_383,

    "Russia" => 145_934_462,

    "Mexico" => 128_932_753,

}

Переменная населения имеет тип Hash(String, Int32) и состоит из 10 элементов.

Типы ключей и значений выводятся из использования, но если вам нужно объявить пустой хэш, типы необходимо будет указать явно, как и массивы:

population = {} of String => Int32

Хэши — это изменяемые коллекции, в которых есть несколько операторов для запроса и управления ими. Вот некоторые распространенные примеры:

Таблица 2.8 – Общие операции с хеш-контейнерами
ОперацияОписание
hash[key]Считывает значение по заданному ключу. Если ключ не существует, это вызовет ошибку времени выполнения. Например, население ["India"] составляет 1380004385 человек.
hash[key]?Считывает значение по заданному ключу, но если ключ не существует, вместо выдачи ошибки возвращается ni 1. Например, население ["India"]? 13 8 00 043 8 5 и население ["Mars"] ? равен nil.
Hash [key] = valueЗаменяет значение данного ключа, если оно существует. В противном случае к хешу добавляется новая пара ключ-значение.
ОперацияОписание
hash.delete(key)Находит и удаляет пару, определенную данным ключом. Если он был найден, возвращается удаленное значение; в противном случае возвращается nil.
hash.each { k, v p k, v }Перебирает элементы, хранящиеся в хеше. Перечисление следует порядку, в котором были вставлены ключи. Вот пример:
hash.each key { кpopulation.each do country, pop puts "#{country} has {pop}
P к }people."
hash.each value {End
|v| p v }
hash.has key?(key)Проверяет, существует ли данный ключ или значение в хеш-структуре.
hash.has value?(val)
hash.key for(value)Находит пару с заданным значением и возвращает ее ключ. Эта операция является дорогостоящей, поскольку ей приходится искать все пары одну за другой.
hash.key for?(value)
hash.keysСоздает массив всех ключей или массив всех значений хеша.
hash.values

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

puts "Total population: #{population.values.sum}"

Если вы попробуете этот код, вы увидите, что он не работает со следующим сообщением об ошибке:

Unhandled exception: Arithmetic overflow (OverflowError)

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных