Динамично генерируйте многомерный массив в Ruby

Я пытаюсь создать многомерный массив динамично. То, что я хочу, является в основном этим (выписанный для простоты):

b = 0

test = [[]]

test[b] << ["a", "b", "c"]
b += 1
test[b] << ["d", "e", "f"]
b += 1
test[b] << ["g", "h", "i"]

Это дает мне ошибку: NoMethodError: неопределенный метод' <<' для nil:NilClass. Я могу заставить его работать путем установки массива как

test = [[], [], []]

и это хорошо работает, но в моем фактическом использовании, я не буду знать, сколько массивов будет необходимо заранее. Существует ли лучший способ сделать это?Спасибо

5
задан MWean 8 May 2010 в 21:28
поделиться

2 ответа

Нет необходимости в индексной переменной, как вы используете. Просто добавьте каждый массив к массиву test:

irb> test = []
  => []
irb> test << ["a", "b", "c"]
  => [["a", "b", "c"]]
irb> test << ["d", "e", "f"]
  => [["a", "b", "c"], ["d", "e", "f"]]
irb> test << ["g", "h", "i"]
  => [["a", "b", "c"], ["d", "e", "f"], ["g", "h", "i"]]
irb> test
  => [["a", "b", "c"], ["d", "e", "f"], ["g", "h", "i"]]
7
ответ дан 13 December 2019 в 05:31
поделиться

Не используйте метод <<, используйте = вместо этого:

test[b] = ["a", "b", "c"]
b += 1
test[b] = ["d", "e", "f"]
b += 1
test[b] = ["g", "h", "i"]

Или еще лучше:

test << ["a", "b", "c"]
test << ["d", "e", "f"]
test << ["g", "h", "i"]
5
ответ дан 13 December 2019 в 05:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: