开发者

Dynamically Generate Multi-Dimensional Array in Ruby

开发者 https://www.devze.com 2022-12-29 10:04 出处:网络
I\'m trying to build a multidimensional array dynamically. What I want is basically this (written out for simplicity):

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


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] p_size=@OneDArray.size 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]]

0

精彩评论

暂无评论...
验证码 换一张
取 消