使用Ruby存储csv数据以进一步操作

时间:2010-05-20 21:56:23

标签: ruby database csv

我正在处理一个csv文件,其中包含一些客户信息(电子邮件,姓名,地址,金额,[shopping_list:第1项,第2项])。

我想处理数据并生成一些打印标签......以及收集一些额外信息(总金额,总项目数1 ......)

我主要关心的是找到适当的结构来将数据存储在ruby中以供将来操作。现在我想到了以下几种可能性:

  1. 多维数组:构建起来非常简单,但很难以漂亮的红宝石方式访问数据。
  2. 哈希:将电子邮件作为密钥,并将信息存储在不同的哈希值中(一个哈希用于名称,另一个哈希用于地址,另一个哈希用于购物清单......)
  3. (将cvs数据导入数据库并使用ruby中的数据?)
  4. 我非常感谢您的建议和指导!!

1 个答案:

答案 0 :(得分:2)

如果您需要将多个信息组合在一起,那么就应该考虑从通用哈希/数组转移到更专业的信息。你所描述的是一个很好的候选人是Ruby的struct module

Customer = Struct.new(:email, :name, :address) # etc.

bill = Customer.new('bill@asdf.com', 'Bill Foo', '123 Bar St.')

puts "#{bill.name} lives at #{bill.address} and can be reached at #{bill.email}"

输出:

Bill Foo lives at 123 Bar St. and can be reached at bill@asdf.com

Struct#new只为你传入的每个符号创建一个attr_accessor的类。嗯,它实际上创造了更多,但对于初学者来说,这就是你需要担心的一切。 / p>

一旦你将每一行的数据打包成某种对象(无论是struct还是你自己的类),那么你可以担心如何存储那些对象。

  • 哈希将非常适合给定密钥的随机访问(可能是客户的名称或其他唯一ID)
  • 一维数组可以按照插入顺序对整个客户进行迭代。