【发布时间】:2011-05-10 21:06:13
【问题描述】:
我想保留从磁盘加载、以某种方式处理并写回磁盘的 YAML 文件中键的顺序。
这是在 Ruby (v1.8.7) 中加载 YAML 的基本示例:
require 'yaml'
configuration = nil
File.open('configuration.yaml', 'r') do |file|
configuration = YAML::load(file)
# at this point configuration is a hash with keys in an undefined order
end
# process configuration in some way
File.open('output.yaml', 'w+') do |file|
YAML::dump(configuration, file)
end
不幸的是,一旦构建了哈希,这将破坏configuration.yaml 中键的顺序。我找不到控制YAML::load() 使用什么数据结构的方法,例如alib 的orderedmap。
我没有运气在网上搜索解决方案。
【问题讨论】:
-
你使用的是什么版本的 ruby?
-
那么,你无法做到这一点。 ruby 1.8 中的哈希没有排序的概念。
-
@sawa:在 Ruby 1.8 中没有一个可以进行有序哈希的 gem 吗? (我不记得它是猴子补丁哈希还是创建自己的类)
-
@Andrew 我找到了 OrderedHash:rubygems.org/gems/orderedhash。我看起来像是创建了一个 Hash 的子类,将订单信息保存为一个实例变量数组。