Выбрать главу
Операция Описание
array.sort Реорганизует элементы массива, чтобы обеспечить их упорядоченность. Другой полезный вариант — сортировка по методу, при которой для получения критериев сортировки требуется блок. Первый вариант возвращает отсортированную копию массива, а второй сортирует на месте.
array.sort!
array.shuffle array.shuffle! Реорганизует элементы массива случайным образом. Все перестановки имеют одинаковую вероятность. Первый вариант возвращает перетасованную копию массива; второй шаркает на месте.
list.each do el puts el Перебирает элементы коллекции. Порядок сохранен.
end
list.find do el Возвращает первый элемент массива или кортежа, соответствующий заданному условию. Если ни одно не соответствует, возвращается nil.
   el > 3
end
list.map do el Преобразует каждый элемент списка, применяя к нему блок, возвращая новую коллекцию (массив или кортеж) с новыми элементами в том же порядке. У массива также есть карта! метод, который изменяет элементы на месте.
   el + 1
end
list.select do el Возвращает новый массив, отфильтрованный по условию в блоке. Если ни один элемент не соответствует, массив будет пустым. Существует также функция reject, которая выполняет противоположную операцию, фильтруя несовпадающие элементы. Для массивов доступны варианты на месте путем добавления ! к имени метода.
   el > 3
end

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

Хэш

Тип 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