2012-02-08 98 views
3

我已經被告知,根據使用的YAML庫,當YAML文件中的列表(不是哈希!)被轉換爲Ruby數組時,順序不能保證。但是,我一直無法找到任何證據。因此,考慮像YAML文件:從YAML文件加載的Ruby數組是否保證其順序保存?

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

YAML::load File.read('filename')後,我總是保證得到{'letters'=>['a', 'b', 'c', 'd', 'e']},而不是一些其他的排序,無論哪個YAML庫我使用,正確的?

+1

我從來沒有聽說過。列表和數組本質上是有序的。 – 2012-02-08 16:49:12

回答

2

是的,序列的順序是有保證的。從無序映射的spec討論:

在節點順序爲顯著每一種情況下,必須使用一個序列。

1

我不能說Ruby Ruby YAML實現 ,但根據定義,「list」是「有序的值集合」。

而且,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 

看起來很安全,它總是會被訂購!

相關問題