有人告诉我,根据使用的 YAML 库,当 YAML 文件中的列表(不是哈希!)被转换为 Ruby 数组时,不能保证顺序。但是,我无法找到任何证据。因此,给定一个 YAML 文件,例如:
letters:
- a
- b
- c
- d
- e
之后,无论我使用哪个 YAML 库YAML::load File.read('filename')
,我总是保证得到,而不是其他一些排序,对吗?{'letters'=>['a', 'b', 'c', 'd', 'e']}
是的,保证了序列的顺序。从无序映射的规范讨论中:
在节点顺序很重要的每种情况下,都必须使用序列。
我不能代表 Ruby YAML 实现,但根据定义,“列表”是“值的有序集合”。
而且,一个 YAML 列表确实是这样定义的;
letters:
- a
- b
- c
- d
- e
快速测试;
require 'yaml'
results = Array.new(1_000) do
YAML.load("letters:\n- a\n- b\n- c\n- d\n- e")
end
puts results.uniq
似乎很安全,它总是会被订购!