如何将文件的元素放入哈希? -红宝石

时间:2009-08-11 21:51:11

标签: ruby hash

所以我有一个以下形式的文件:

Key1   Value1
Key2   Value2
Key3   Value3

由标签分隔。我的问题是如何打开此文件并将其放入哈希?我试过这样做:

 fp = File.open(file_path)

 fp.each do |line|
   value = line.chomp.split("\t")
   hash = Hash[*value.flatten]
 end

但是在这个循环结束时,@ datata散列只包含最新的条目...我有点想要它......

2 个答案:

答案 0 :(得分:8)

hash[key] = value添加新的键值对。 hash.update(otherhash)将fromhash中的键值对添加到哈希值。

如果你执行hash = foo,则会重新分配哈希,丢失旧内容。

因此,对于您的情况,您可以这样做:

hash = {}
File.open(file_path) do |fp|
  fp.each do |line|
    key, value = line.chomp.split("\t")
    hash[key] = value
  end
end

答案 1 :(得分:0)

应用https://stackoverflow.com/a/4120285/2097284的答案:

hash = Hash[*File.read(file_path).split("\t")]

这扩展到

hash = Hash["Key1", "Value1", "Key2", "Value2", "Key3", "Value3"]

为了获得更强大的效果,请将"\t"替换为/\s+/(以允许任何类型的空格)。