如何从枚举中创建哈希?

时间:2015-02-28 12:51:09

标签: ruby

如何自动创建大哈希并将其存储在文件中?

结果应该是:=> {:1=>10, :2=>10, :3=>10, ... :100=>10}

2 个答案:

答案 0 :(得分:1)

我会这样做:

File.open('filename.txt', 'w') do |file| 
   file.write(Hash[(1..100).map { |i| [i, 10] }]) 
end

答案 1 :(得分:1)

您还没有告诉我们几乎足以提供具体的建议,但是,一般来说,您应该考虑使用YAML来序列化哈希。 YAML is a defined specification可以轻松地将数据存储为人们可以轻松阅读的格式,并且可以轻松地被其他语言重复使用。

例如,这是序列化时基本哈希的样子:

require 'yaml'

hash = {'a' => 1, 'b' => 2}
puts hash.to_yaml 

运行该代码将输出:

---
a: 1
b: 2

因为它只是一个字符串输出,所以很容易将其写入文件:

File.write('hash.yaml', hash.to_yaml)

当运行时,在我当前目录中创建一个包含上述输出的文件:

$ cat hash.yaml
---
a: 1
b: 2

我可以重新读取数据并将其解析回哈希:

hash = YAML.load_file('hash.yaml')
# => {"a"=>1, "b"=>2}

我可以修改YAML文件:

---
a: 1
b: 2
c: 3

并重新加载并查看新元素:

hash = YAML.load_file('hash.yaml')
# => {"a"=>1, "b"=>2, "c"=>3}

YAML能够序列化非常复杂的数组和散列,其他语言可以重用这些数据。对象变得时髦,因此创建自己的to_ato_hto_yaml方法总是很好,然后输出数组或散列,以便YAML引擎可以正确地序列化它们。 / p>

Ruby YAML class只定义了一些方法。 Psych是底层引擎,因此其文档也很重要。例如,我使用load_file重新加载文件,并在Psych documentation中记录。