【发布时间】:2010-12-14 16:28:28
【问题描述】:
我正在从哈希构建一个 xml 文档。 xml 属性需要按顺序排列。这如何实现?
hash.to_xml
【问题讨论】:
标签: ruby-on-rails xml ruby hash
我正在从哈希构建一个 xml 文档。 xml 属性需要按顺序排列。这如何实现?
hash.to_xml
【问题讨论】:
标签: ruby-on-rails xml ruby hash
Ruby 1.8 的哈希不是按插入顺序排列的。使用 ruby 1.9,它们将是。
但是 rails 提供了一个替代方案,OrderedHash 类。
my_hash = ActiveSupport::OrderedHash.new
my_hash[:key] = 'value'
my_hash[:second_key] = 'second value'
这个哈希实际上是一个这种格式的数组:
[[:key, 'value'], [:second_key, 'second value']]
条目保持您插入它们的顺序。
您可以像使用任何其他哈希一样访问它们。
【讨论】:
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]]
【讨论】:
【讨论】:
您希望它们按什么顺序排列?您不应该期望它们按插入顺序排列。来自docs for Hash:
遍历哈希的顺序 通过键或值似乎 任意的,一般不会 在插入顺序中。
如果您需要它们按特定顺序排列,您可以仅根据键/值来确定(例如,按字母顺序排列属性名称),您需要明确应用该顺序。
【讨论】:
我刚刚为 i18n-js 编写的这段代码可能会对您有所帮助,因为它将 Hash 转换为 ActiveSupport::OrderedHash 如果需要,然后按自然顺序对其进行排序。
http://seb.box.re/2010/1/15/deep-hash-ordering-with-ruby-1-8
【讨论】: