5

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

3 Answers 3

7

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"]]
Sign up to request clarification or add additional context in comments.

Comments

5

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"]

Comments

0

Here is a simple example if you know the size of array you are creating.
@OneDArray=[1,2,3,4,5,6,7,8,9] [email protected] c_loop=p_size/3 puts "c_loop is #{c_loop}" left=p_size-c_loop*3

@TwoDArray=[[],[],[]]
k=0
for j in 0..c_loop-1
       puts "k is  #{k} "
        for i in 0..2
         @TwoDArray[j][i]=@OneDArray[k]
      k+=1
    end
 end

result will be @TwoDArray= [[1,2,3].[3,4,5],[6,7,8]]

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.