Гарантируется ли, что загруженные из файлов YAML массивы Ruby сохранят свой порядок? - PullRequest
3 голосов
/ 08 февраля 2012

Мне сказали, что в зависимости от используемой библиотеки YAML, когда список (не хэш!) В файле YAML транслируется в массив Ruby, порядок не гарантируется. Однако я не смог найти никаких доказательств этого. Итак, с учетом файла YAML, например:

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

После выполнения YAML::load File.read('filename') я всегда гарантирую получить {'letters'=>['a', 'b', 'c', 'd', 'e']} вместо какого-либо другого порядка, независимо от того, какую библиотеку YAML я использую, правильно?

Ответы [ 2 ]

2 голосов
/ 08 февраля 2012

Да, порядок последовательности гарантирован. Из обсуждения spec неупорядоченных отображений:

В каждом случае, когда порядок узлов значим, должна использоваться последовательность.

1 голос
/ 08 февраля 2012

Я не могу говорить за реализацию 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

Кажется довольно безопасным, что он всегда будет заказан!

...