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 に答える