4

有人告诉我,根据使用的 YAML 库,当 YAML 文件中的列表(不是哈希!)被转换为 Ruby 数组时,不能保证顺序。但是,我无法找到任何证据。因此,给定一个 YAML 文件,例如:

letters:
- a
- b
- c
- d
- e

之后,无论我使用哪个 YAML 库YAML::load File.read('filename'),我总是保证得到,而不是其他一些排序,对吗?{'letters'=>['a', 'b', 'c', 'd', 'e']}

4

2 回答 2

3

是的,保证了序列的顺序。从无序映射的规范讨论中:

在节点顺序很重要的每种情况下,都必须使用序列。

于 2012-02-08T17:03:24.653 回答
1

我不能代表 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

似乎很安全,它总是会被订购!

于 2012-02-08T16:55:00.693 回答