Отредактировано для добавления : Ваши комментарии указывают на то, что вы хотите, чтобы элемент 'a' был массивом массивов. Вот оно:
h = Hash.new
h = {"a" => [["b","e"]]}
p h # => {"a"=>[["b", "e"]]}
h["a"] << ["d", "f"]
p h # => {"a"=>[["b", "e"], ["d", "f"]]}
При диагностике проблемы предпочитайте p
puts
. puts
может скрывать важные детали. Давайте добавим несколько звонков к p
и посмотрим, что мы узнаем. О, и я поменяю имя хеша с "p" на "h". Иначе вокруг слишком много «р».
h = Hash.new
Приведенная выше строка не нужна. Следующая строка присваивает массив «h», перезаписывая это назначение.
h = {"a" => ["b","e"]}
p h # => {"a"=>["b", "e"]}
p h["a"].size # 2
Все именно так, как и должно быть, даже h ["a"]. Размер возвращается 2. почему?
p h["a"] # => ["b", "e"]
Потому что h ["a"] - это массив с двумя элементами.
h["a"] << ["d", "f"]
p h # => {"a"=>["b", "e", ["d", "f"]]}
Вы видите, что случилось? <<
добавляет один элемент в конец массива, и этот единственный элемент является массивом ["d", "f"]. И вот почему:
p h["a"].size # => 3
Поскольку в массиве действительно есть три элемента: строки "b" и "e" и массив ["d", "f"].
Если вы хотели добавить элементы "d" и "f" в массив, то сделайте это с помощью +=
:
h = {"a" => ["b","e"]}
h["a"] += ["d", "f"]
p h # => {"a"=>["b", "e", "d", "f"]}