【问题标题】:Ordering a hash to xml: Rails将哈希排序到 xml:Rails
【发布时间】:2010-12-14 16:28:28
【问题描述】:

我正在从哈希构建一个 xml 文档。 xml 属性需要按顺序排列。这如何实现?

hash.to_xml

【问题讨论】:

    标签: ruby-on-rails xml ruby hash


    【解决方案1】:

    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']]
    

    条目保持您插入它们的顺序。
    您可以像使用任何其他哈希一样访问它们。

    【讨论】:

    • 试过这个没有运气。它仍然随机显示。使用 Ruby 1.8.7。
    【解决方案2】:
    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]]
    

    【讨论】:

      【解决方案3】:

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

      hash.sort

      然而,通过使用宇宙飞船操作符可以实现更复杂的排序

      【讨论】:

        【解决方案4】:

        您希望它们按什么顺序排列?您不应该期望它们按插入顺序排列。来自docs for Hash

        遍历哈希的顺序 通过键或值似乎 任意的,一般不会 在插入顺序中。

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

        【讨论】:

          【解决方案5】:

          我刚刚为 i18n-js 编写的这段代码可能会对您有所帮助,因为它将 Hash 转换为 ActiveSupport::OrderedHash 如果需要,然后按自然顺序对其进行排序。

          http://seb.box.re/2010/1/15/deep-hash-ordering-with-ruby-1-8

          【讨论】:

            猜你喜欢
            • 2023-03-27
            • 2013-09-21
            • 2010-10-20
            • 2013-12-04
            • 2020-04-17
            • 1970-01-01
            • 2014-10-27
            • 2019-08-11
            • 2011-05-19
            相关资源
            最近更新 更多