2011-04-13 114 views
1

一個多維數組的一個項目我有這樣如何調用紅寶石

i = 0 
lines.each do |l| 
    array[i] = l.split(',') 
    i+=1 
end 

一個數組,我想打電話$array[1][3]像PHP的,但它沒有工作。我已經谷歌超過幾個小時了,並且找不到解決方案。

+3

當你說「沒有工作」時,你實際上並沒有告訴我們什麼時候出錯。你是否得到了錯誤的答案,你是否看到錯誤信息,你的電腦是否爆炸成了紫色大象的陣雨? – Gareth 2011-04-13 15:18:49

+1

sry我有一個Windows相關的錯誤,我開始我的Ubuntu的,它的工作方式 – Mikee 2011-04-13 15:37:51

回答

2

首先有一些改進,以您的codez:

# initialize your vars 
array = [] 
lines.each do |l| 
    array << l.split ',' # use the << operator 
end 

現在紅寶石數組的美元符號是沒有必要的,它指的全局變量,它不使用它們很好的做法。

您應該像這樣訪問您的變量:array[1][3]

你可以讓你的代碼一襯在ruby1.9:

array = lines.each_line.map {|l| l.split ',' } 
+0

紅寶石1.8的方式有什麼問題? array = lines.collect {| l | l.split','} – Simon 2011-04-13 15:06:31

+0

@Simon沒有特別的,我補充說,這只是一個獎金重構。假設行是一個字符串,也可以重寫爲1.8.7,如'array = lines.split(「\ n」)。 l.split','}'。 – 2011-04-13 15:09:04

0

如果你的問題是,調用array[6][3]回報類似Error: method [] undefined for nil,然後做這個:

array[6].to_a[3] 

每當任行(6)或列(3)超出範圍,則返回nilto_a可確保即使行超出範圍,它仍然會給出一個空數組,以便搜索列不會返回錯誤。