Как вставить элемент в массив в массиве? - PullRequest
0 голосов
/ 06 июня 2018

Допустим, я хотел бы создать новый массив массивов

arr = Array.new(5,[])
=> [[], [], [], [], []]

Как я могу специально поместить элемент в один из этих массивов?

Когда я пытаюсь нажать только на один из массивов, значение всегда добавляется ко всем из них:

arr[3].push("foo")
=> ["foo"]

arr
=> [["foo"], ["foo"], ["foo"], ["foo"], ["foo"]]

1 Ответ

0 голосов
/ 06 июня 2018

Проблема не в том, как вы толкаете, а в том, как вы создаете массив.

Массив инициализируется с 5 ссылками на тот же массив , поэтомукогда вы изменяете одну из них, все другие копии тоже меняются.

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

arr = Array.new(5) { [] }

Блок (бит между {}) выполняется для создания всех 5 элементов массива, так что в итоге вы получите 5 различных массивов.

Ваш код тогда работает как положено:

arr = Array.new(5) { [] }
=> [[], [], [], [], []]

arr[3].push("foo")
=> ["foo"]

arr
=> [[], [], [], ["foo"], []]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...