2014-11-01 94 views
0

我從一個CSV文件中讀取與成爲訪問數組值

parse = [["742", "Rewards", "0.309", "0.249", "0.0195", "0.1"], ["742", "Reg (DB)", "0.165", "0.194", "0.0005", "0.21"]] 

我試圖在陣列內訪問陣列和解析更改文本格式整數和浮點數的數組。我當前的代碼如下:

require 'CSV' 

parse = CSV.read("testDB.csv") 
parse.map do |code, cat, pervol, percnt, rate, fee| 
    code.to_i 
    pervol.to_f 
    percnt.to_i 
    rate.to_f 
    fee.to_f 
end 

我是新來的Ruby和知道這是不正確,但我無法找到正確的組合,相應地改變陣列。任何人都可以提供解決方案嗎?

回答

0

你想做到這一點?:

parse.map{ |r| [r[0].to_i, r[1], r[2].to_f, r[3].to_f, r[4].to_f, r[5].to_f] } 
#=> [[742, "Rewards", 0.309, 0.249, 0.0195, 0.1], [742, "Reg (DB)", 0.165, 0.194, 0.0005, 0.21]] 

parse是數組的數組,因此,在map你必須訪問數組對象,其索引,然後做相應的操作。

由於約爾格W¯¯米塔格指出的那樣,你可以用這樣的解構綁定和有意義的變量名(這有助於瞭解哪些對象就是數組中)做到這一點:

parse.map{ |code, cat, pervol, percnt, rate, fee| [code.to_i, cat, pervol.to_f, percnt.to_f, rate.to_f, fee.to_f] } 
+0

啊謝謝你,這樣過嘗試它,當我錯過了陣列支架,現在我明白了。謝謝! – heinztomato 2014-11-02 01:05:18

+0

如果使用解構綁定和有意義的變量名稱而不是無意義的索引,這將更容易閱讀:''parse.map {| code,cat,pervol,percnt,rate,fee | [code.to_i,cat,pervol.to_f,percnt.to_f,rate.to_f,fee.to_f]}' – 2014-11-02 01:58:14

+0

@JörgWMittag:這真的很有幫助。感謝您的見解。 – Surya 2014-11-02 08:42:21

0

我建議如下:

parse = [["742", "Rewards", "0.309", "0.249", "0.0195", "0.1"], 
     ["742", "Reg (23)", "0.165", "0.194", "0.0005", "0.21"]] 

parse.map do |arr| 
    arr.map do |e| 
    case e 
    when /^\d+$/ then e.to_i 
    when /^\d+\.\d+$/ then e.to_f 
    else e 
    end 
    end 
end 
    #=> [[742, "Rewards", 0.309, 0.249, 0.0195, 0.1], 
    # [742, "Reg (23)", 0.165, 0.194, 0.0005, 0.21]]