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 ] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |