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

ruby – 从类似CSV的文件创建哈希,第1张

概述我有一个产品文件,列出了商品#,产品和价格.我想阅读这个文件,并将其初始化为哈希,项目#是关键,产品和价格是价值.这是我的档案 199, Shoes, 59.99211, Shirts, 19.99245, Hats, 25.99689, Coats, 99.99712, Beanies, 6.99 我希望它看起来像这样. products = { 199 =>['Shoes', 59 我有一个产品文件,列出了商品#,产品和价格.我想阅读这个文件,并将其初始化为哈希,项目#是关键,产品和价格是价值.这是我的档案

199,Shoes,59.99211,Shirts,19.99245,Hats,25.99689,Coats,99.99712,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]endproducts#=> {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 ]
总结

以上是内存溢出为你收集整理的ruby – 从类似CSV的文件创建哈希全部内容,希望文章能够帮你解决ruby – 从类似CSV的文件创建哈希所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1250188.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存