Я пытаюсь создать многомерный массив динамично. То, что я хочу, является в основном этим (выписанный для простоты):
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 = [[], [], []]
и это хорошо работает, но в моем фактическом использовании, я не буду знать, сколько массивов будет необходимо заранее. Существует ли лучший способ сделать это?Спасибо
Нет необходимости в индексной переменной, как вы используете. Просто добавьте каждый массив к массиву 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"]]
Не используйте метод <<
, используйте =
вместо этого:
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"]