2011-04-13 101 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