2012-12-11 115 views
-2

我的數組是["Mehmet,1,3,0,0,0\n", "Veli,2,1,2,0,2\n", "Ali,0,1,1,0,0\n"]製作二維數組

我想聲明二維數組array[1][2]與第一維的名稱和第二個音符。

我該怎麼做?

TEXT.TXT是

穆罕默德,1,3,0,0,0 帆,2,1,2,0,2 阿里,0,1,1,0,0

我的代碼是

filename = "text.txt" 
results = [] 
File.new(filename, "r").each { |line| results << line } 

results.inject([]){|ar,s| 
ar.concat(s.split(/,/))} 


puts results.inspect 
+3

您應該制定你的問題更好的開始。例如發佈預期結果。 –

+0

你能解釋一下嗎?我不明白,因爲我是紅寶石新手。 – SemihY

+1

你想要在代碼中聲明二維數組還是要將初始數組轉換爲二維數組形式? –

回答

0

2D陣列裝置數組的數組。所以,只要它可像:

board = [ [ 1, 2, 3 ],[ 4, 5, 6 ]] 
+2

這不回答問題。 –

+1

對不起,誤會。但我認爲問題不夠清楚:) –

1
array = File.read("text.txt").split 
# => ["Mehmet,1,3,0,0,0", "Veli,2,1,2,0,2", "Ali,0,1,1,0,0"] 

array.map { |ar| x, *xs = ar.split(","); [x, xs.join] } 
# => [["Mehmet", "13000"], ["Veli", "21202"], ["Ali", "01100"]] 

或者,如果你不想加入第二子陣列

array.map { |ar| x, *xs = ar.split(","); [x, xs] } 
# => [["Mehmet", ["1", "3", "0", "0", "0"]], 
#  ["Veli", ["2", "1", "2", "0", "2"]], 
#  ["Ali", ["0", "1", "1", "0", "0"]]] 
+1

+1我喜歡這樣。很好的使用splat。 –

0

您正在尋找這樣的事情?

array = ["Mehmet,1,3,0,0,0\n", "Veli,2,1,2,0,2\n", "Ali,0,1,1,0,0\n"] 
new_array = array.map do |elem| 
    splited = elem.split(/[,\s]/) 
    [splited.shift, splited] 
end 
# => [["Mehmet", ["1", "3", "0", "0", "0"]], 
#  ["Veli", ["2", "1", "2", "0", "2"]], 
#  ["Ali", ["0", "1", "1", "0", "0"]]] 
1

修改的設置,你先貼:

data = ["Mehmet,1,3,0,0,0\n", "Veli,2,1,2,0,2\n", "Ali,0,1,1,0,0\n"] 
data = data.map {|x| y = x.split(","); [y.delete_at(0), y] } 

=> [["Mehmet", ["1", "3", "0", "0", "0\n"]], 
["Veli", ["2", "1", "2", "0", "2\n"]], 
["Ali", ["0", "1", "1", "0", "0\n"]]] 

puts data[0][0] 
=> Mehmet