Заказ хэша в xml: Rails - PullRequest
       11

Заказ хэша в xml: Rails

2 голосов
/ 09 ноября 2009

Я строю XML-документ из хэша. Атрибуты xml должны быть в порядке. Как это можно сделать?

hash.to_xml

Ответы [ 5 ]

4 голосов
/ 09 ноября 2009

Хеш Ruby 1.8 находится не в порядке вставки. С ruby ​​1.9 они будут.

Однако рельсы предлагают альтернативу этому, класс OrderedHash.

my_hash = ActiveSupport::OrderedHash.new
my_hash[:key] = 'value'
my_hash[:second_key] = 'second value'

Этот хеш на самом деле является массивом этого формата:

[[:key, 'value'], [:second_key, 'second value']]

Записи остаются в том порядке, в котором вы их вставили.
И вы можете получить к ним доступ, как с любым другим хешем.

2 голосов
/ 09 ноября 2009
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]]
1 голос
/ 09 ноября 2009

Обычные способы сортировки хеша - по ключу или значению. Посмотрите здесь:

hash.sort

Однако более сложные сортировки могут быть выполнены с помощью оператора космического корабля

0 голосов
/ 15 января 2010

Этот фрагмент кода, который я только что создал для i18n-js, может помочь вам, так как при необходимости он конвертирует Hash в ActiveSupport :: OrderedHash, а затем сортирует ключ по естественному порядку.

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

0 голосов
/ 09 ноября 2009

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

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

Если вам нужно, чтобы они были в определенном порядке, который вы можете определить только по ключам / значениям (например, упорядочить имена атрибутов в алфавитном порядке), вам необходимо применить этот порядок явно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...