访问数组和映射值中的数组

时间:2014-11-01 20:59:11

标签: ruby arrays map

我正在读取一个包含

数组的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的新手并且知道这是不正确的但是我找不到合适的组合以相应地更改数组。任何人都可以协助解决方案吗?

2 个答案:

答案 0 :(得分: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中,您必须使用索引访问数组对象,然后相应地执行操作。

正如JörgWMittag所指出的那样,你可以通过解构bind和有意义的变量名(这有助于理解数组中的对象是这样的)来做到这一点:

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

答案 1 :(得分: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]]