Массивы не единственный способ управлять коллекциями переменных в Рубин. Другим типом набора переменных является гашишТакже называется ассоциативным массивом. Хеш похож на массив в том, что это переменная, которая хранит другие переменные. Однако хеш отличается от массива тем, что хранимые переменные не хранятся в каком-либо конкретном порядке и извлекаются с помощью ключа, а не по их положению в коллекции.
Создать хэш с парой ключ / значение
Хеш полезен для хранения того, что называется пары ключ / значение. Пара ключ / значение имеет идентификатор, указывающий, к какой переменной хэша вы хотите получить доступ и переменная для хранения в этой позиции в хэше. Например, учитель может хранить оценки ученика в хэше. Класс Боба будет доступен в хэше с помощью ключа «Боб», а переменная, хранящаяся в этом месте, будет классом Боба.
Хеш-переменная может быть создана так же, как переменная массива. Самый простой способ - создать пустой хеш-объект и заполнить его парами ключ / значение. Обратите внимание, что используется оператор индекса, но вместо числа используется имя учащегося.
Помните, что хэши неупорядочены, то есть нет определенного начала или конца, как в массиве. Таким образом, вы не можете добавить к хешу. Значения просто вставляются в хеш с помощью оператора индекса.
#! / usr / bin / env ruby
grades = Hash.new
оценки ["Боб"] = 82
оценки ["Джим"] = 94
оценки ["Билли"] = 58
ставит оценки ["Джим"]
Хеш-литералы
Как и массивы, хеш может быть создан с помощью хеша литералы. Хеш-литералы используют фигурные скобки вместо квадратных скобок, а пары ключ-значение соединяются =>. Например, хеш с одной парой ключ / значение Bob / 84 будет выглядеть так: {"Bob" => 84}. Дополнительные пары ключ / значение могут быть добавлены в хеш-литерал, разделяя их запятыми. В следующем примере создается хеш с оценками для нескольких студентов.
#! / usr / bin / env ruby
grades = {"Bob" => 82,
"Джим" => 94,
"Билли" => 58
}
ставит оценки ["Джим"]
Доступ к переменным в хеше
Могут быть случаи, когда вы должны обращаться к каждой переменной в хэше. Вы все еще можете перебирать переменные в хэше, используя каждый цикл, хотя он не будет работать так же, как при использовании каждый цикл с переменными массива. Поскольку хэш неупорядочен, порядок, в котором каждый зацикливание пар ключ / значение может не совпадать с порядком, в котором вы их вставили. В этом примере хэш оценок будет зациклен и напечатан.
#! / usr / bin / env ruby
grades = {"Bob" => 82,
"Джим" => 94,
"Билли" => 58
}
grades.each do | имя, оценка |
ставит "# {имя}: # {оценка}"
конец