2011-04-13 102 views
0

处理我有这样的2多维数组在红宝石

[["1"], ["2","3"]] 

在开始的时候我有这个算法

maxarray = [] 
i = 0 
m = array.count 
while i < m do 
    x = 0 
    s = array[i].count 
    while x < s do 
    maxarray[i][x] = (Integer(array[i][x]) + [Integer(maxarray[i-1][x-1]), Integer(maxarray[i-1][x])].max) 
    x+=1 
    end 
    i+=1 
end 

错误是这样的数组:

`<main>': undefined method `[]' for nil:NilClass (NoMethodError) 

所以我想也许数组索引出错了,所以我扩展了我的算法

maxarray = [] 
i = 0 
m = array.count 
while i < m do 
    x = 0 
    s = array[i].count 
    while x < s do 
    if i-1 < 0 
     item2 = 0 
    elsif i-1 < 0 && x-1 < 0 
     item1 = 0 
    else item1 = maxarray[i-1][x-1] 
     item2 = maxarray[i-1][x] 
    end 
    maxarray[i][x] = (Integer(array[i][x]) + [Integer(item1), Integer(item2)].max) 
    x+=1 
    end 
    i+=1 
end 

,但现在我有一个不同的错误:

`Integer': can't convert nil into Integer (TypeError) 

如何防止这种错误并运行该脚本?

+0

为什么不使用:'maxarray.each do | cur_x | (do_something)end'你在这里没有使用Ruby的权力:) – SirLenz0rlot 2011-04-13 16:59:04

+2

也许你可以解释你正在做什么,而不是给你当前的解决方案... – 2011-04-13 17:01:51

+1

@Chris McCauley它正好在中间'maxarray =(Integer(array [i] [x])+ [Integer(item1),Integer(item2)]。max)':) – Mikee 2011-04-13 17:06:11

回答

0

为什么你不需要flatten该数组,并使您的计算?当然,它会让你的功能更简单。

+0

它看起来像涉及动态编程的一些任务,它依赖于数据集的多个维度来保持代码更简单。这是猜测,因为即使作者也没有解释他的意图。 – 2014-11-27 00:46:54