Ruby on rails 将散列排序为xml:Rails

Ruby on rails 将散列排序为xml:Rails,ruby-on-rails,xml,ruby,hash,Ruby On Rails,Xml,Ruby,Hash,我正在从散列构建一个xml文档。xml属性需要按顺序排列。如何做到这一点 hash.to_xml 你希望他们的顺序是什么?你不应该期望它们按顺序插入。从: 遍历散列的顺序 通过键或值可能看起来 武断,一般不会 按插入顺序 如果您需要它们按特定顺序排列,您可以仅根据键/值来确定(例如,按字母顺序排列属性名称),您需要明确应用该顺序。哈希排序的常用方法是按键或值。请看这里: 然而,更复杂的排序可以通过使用spaceship操作符来实现 h = Hash[:x,123,:a,553,:d,949,

我正在从散列构建一个xml文档。xml属性需要按顺序排列。如何做到这一点

hash.to_xml

你希望他们的顺序是什么?你不应该期望它们按顺序插入。从:

遍历散列的顺序 通过键或值可能看起来 武断,一般不会 按插入顺序


如果您需要它们按特定顺序排列,您可以仅根据键/值来确定(例如,按字母顺序排列属性名称),您需要明确应用该顺序。

哈希排序的常用方法是按键或值。请看这里:

然而,更复杂的排序可以通过使用spaceship操作符来实现
h = Hash[:x,123,:a,553,:d,949,:e,5321]
=> {:e=>5321, :x=>123, :a=>553, :d=>949}
h.sort { |x,y| x[0].to_s <=> y[0].to_s }
=> [[:a, 553], [:d, 949], [:e, 5321], [:x, 123]]
=>5321,:x=>123,:a=>553,:d=>949} h、 排序{| x,y | x[0]。to|s y[0]。to|s} =>[:a,553],:d,949],:e,5321],:x,123]]
Ruby 1.8的哈希值不符合插入顺序。有了Ruby1.9,它们将变得更加强大

但是rails提供了另一种选择,类
OrderedHash

my_hash = ActiveSupport::OrderedHash.new
my_hash[:key] = 'value'
my_hash[:second_key] = 'second value'
此哈希实际上是该格式的数组:

[[:key, 'value'], [:second_key, 'second value']]
条目将按您插入的顺序保留。

您可以像访问任何其他哈希一样访问它们。

我刚刚为i18n js编写的这段代码可能会帮助您,因为它可以将哈希转换为ActiveSupport::OrderedHash(如果需要),然后按自然顺序对其键进行排序


尝试此操作时运气不佳。它仍然随机显示。使用Ruby 1.8.7。