加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 从类似CSV的文件创建哈希

发布时间:2020-12-17 01:46:10 所属栏目:百科 来源:网络整理
导读:我有一个产品文件,列出了商品#,产品和价格.我想阅读这个文件,并将其初始化为哈希,项目#是关键,产品和价格是价值.这是我的档案 199,Shoes,59.99211,Shirts,19.99245,Hats,25.99689,Coats,99.99712,Beanies,6.99 我希望它看起来像这样. products = { 199 =['Sh
我有一个产品文件,列出了商品#,产品和价格.我想阅读这个文件,并将其初始化为哈希,项目#是关键,产品和价格是价值.这是我的档案

199,Shoes,59.99
211,Shirts,19.99
245,Hats,25.99
689,Coats,99.99
712,Beanies,6.99

我希望它看起来像这样.

products = {
  199 =>['Shoes',59.99],211 =>['Shirts',19.99],245 =>['Hats',25.99],689 => ['Coats',99.99],712 => ['Beanies',6.99]
}

这就是我能提出的并不是它真正想要的东西.

products_file = File.open("files.txt")
products_hash = []
while ! products_file.eof?
  product_hash = products_file.gets.chomp
  print product_hash.split(',')
end

以下是我提出的输出:

["199","Shoes","59.99"]
["211","Shirts","19.99"]
["245","Hats","25.99"]
["689","Coats","99.99"]
["712","Beanies","6.99"]

解决方法

我将您的数据保存为名为products.csv的CSV文件并执行此操作:

require 'csv'
products = {}
CSV.foreach("products.csv") do |line| 
  products[line[0].to_i] = [line[1].strip,line[2].to_f]
end
products
#=> {199=>["Shoes",211=>["Shirts",245=>["Hats",689=>["Coats",712=>["Beanies",6.99]}

使用each_with_object可以更简洁的方式实现相同的结果,但它会立即将整个文件读入内存,如果文件很大,这可能不是一个好主意:

require 'csv'
products = CSV.read("products.csv").each_with_object({}) do |line,h|
  h[line[0].to_i] = [line[1].strip,line[2].to_f]
end

正如Phrogz最初建议的那样,还有一种更实用的方法:

require 'csv'
products = Hash[ CSV.read('products.csv').map do |row|
  [ row[0].to_i,[row[1].strip,row[2].to_f] ]
end ]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读