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

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

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

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


person Suan    schedule 08.02.2012    source источник
comment
Я никогда этого не слышал. Списки и массивы внутренне упорядочены.   -  person Dave Newton    schedule 08.02.2012


Ответы (2)


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

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

person pilcrow    schedule 08.02.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

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

person Matthew Rudy    schedule 08.02.2012