I'm trying to build a multidimensional array dynamically. What I want is basically this (written out for simplicity):
b = 0
test = [[]]
test[b] << ["a", "b", "c"]
b += 1
test[b] << ["d", "e", "f"]
b += 1
test[b] << ["g", "h", "i"]
This gives me the error: NoMethodError: undefined method `<<' for nil:NilClass. I can make it work by setting up the array like
test = [[], [], []]
and it works fine, but in my actual usage, I won't know how many arrays will be needed beforehand. Is there a better way to do this? Thanks
No need for an index variable like you're using. Just append each array to your test
array:
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"]]
Don't use the <<
method, use =
instead:
test[b] = ["a", "b", "c"]
b += 1
test[b] = ["d", "e", "f"]
b += 1
test[b] = ["g", "h", "i"]
Or better still:
test << ["a", "b", "c"]
test << ["d", "e", "f"]
test << ["g", "h", "i"]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With