Читайте также
8.1.18. Обход массива
Как и следовало ожидать, в классе Array есть стандартный итератор each. Но имеются и другие полезные итераторы.Метод reverse_each обходит массив в обратном порядке. Результат такой же, как если бы мы вызвали сначала метод reverse, а потом each, но работает быстрее.words =
8.1.24. Инвертирование массива для получения хэша
Массив нужен для того, чтобы ассоциировать целое число (индекс) с данными. А если нужно инвертировать это отношение, то есть ассоциировать данные с индексом? Иными словами, породить хэш? Это можно сделать так:class Array def invert h={}
8.2.1. Создание нового хэша
Как и в случае с классом Array, для создания хэша служит специальный метод класса []. Данные, перечисленные в квадратных скобках, образуют ассоциированные пары. Ниже показаны шесть способов вызвать этот метод (все хэши с a1 до c2 содержат одни и те же
8.2.2. Указание значения по умолчанию для хэша
Значением по умолчанию для хэша является объект, возвращаемый вместо nil в случае, когда указанный ключ не найден. Это полезно, если вы планируете вызывать для возвращенного значения методы, которые для nil не определены. Задать
8.2.6. Инвертирование хэша
Инвертирование хэша осуществляется в Ruby тривиально с помощью метода invert:а = {"fred"=>"555-1122","jane"=>"555-7779"}b = a.invertb["555-7779"] # "jane"Поскольку ключи в хэше уникальны, такая операция может привести к потере данных. Значения-дубликаты будут преобразованы в
8.2.8. Копирование хэша в массив
Чтобы преобразовать весь хэш в массив, пользуйтесь методом to_a. В получившемся массиве ключи станут элементами с четными индексами (начиная с 0), а значения — с нечетными:h = {"а"=>1,"b"=>2}h.to_a # ["а",1,"b",2]Можно также получить массив, содержащий
8.2.10. Сортировка хэша
Хэши по природе своей не упорядочены ни по ключам, ни по значениям. Чтобы отсортировать хэш, Ruby преобразует его в массив, который затем сортирует. Понятно, что и результатом является массив.names = {"Jack"=>"Ruby","Monty"=>"Python", "Blaise"=>"Pascal", "Minnie"=>"Perl"} list =
8.2.12. Создание хэша из массива
Простейший способ сделать это — прибегнуть к способу создания хэшей с помощью квадратных скобок. Следующий способ годится, если массив состоит из четного числа элементов.Array =[2,3,4,5,6,7]hash = Hash[*array]# hash равно: {2=>3, 4=>5,
8.2.15. Реализация хэша с повторяющимися ключами
Приверженцы математической строгости скажут, что хэш с повторяющимися ключами — вообще не хэш. Не станем спорить. Называйте как хотите, но на практике бывают случаи, когда нужна структура данных, обладающая гибкостью и
14.4.2. Хранение переменных окружения в виде массива или хэша
Важно понимать, что объект ENV — не настоящий хэш, а лишь выглядит как таковой. Например, мы не можем вызвать для него метод invert; будет возбуждено исключение NameError, поскольку такого метода не существует. Причина
Обход в ширину, симметричный обход и обход в глубину
Прежде чем приступить к описанию остальных трех алгоритмов обхода, которые взаимосвязаны, приведем несколько иное определение бинарного дерева. Бинарное дерево состоит из корневого узла, содержащего указатели на
Обход по уровням
Мы еще не рассматривали обход по уровням, при котором вначале посещается корневой узел, затем слева направо посещаются два возможных узла на первом уровне, затем слева направо четыре возможных узла на втором уровне и т.д. Этот метод обхода кажется слишком
Обход чертежа
Команда 3DWALK интерактивно меняет вид трехмерного чертежа, при этом кажется, что наблюдатель обходит модель. Команда вызывается из падающего меню View ? Walk and Fly ? Walk или щелчком на пиктограмме Walk на плавающей панели инструментов Walk and Fly или 3D Navigation.Обход всей
Обход чертежа
Команда 3DWALK интерактивно меняет вид трехмерного чертежа, при этом кажется, что наблюдатель обходит модель. Команда вызывается из падающего меню View ? Walk and Fly ? Walk или щелчком на пиктограмме Walk на плавающей панели инструментов Walk and Fly или 3D Navigation.Обход всей