Ruby поддерживает порядок вставки хэшей - PullRequest
8 голосов
/ 12 августа 2011

Я ищу способ сохранить порядок вставки для хэша, который я использую в Ruby.Мои данные поступают из базы данных и уже сгруппированы / упорядочены так, как я хочу, но Ruby не гарантирует поддерживаемый порядок в Hashs в моей версии 1.8.4.

Есть ли обходной путь для этого?Если нет, то есть ли способ создать собственный компаратор?

Вот хэш:

{
"February"=>[0.5667, 14.6834, 79.7666, 261.8668, 342.1167, 723.517], 
"March"=>[0.0, 26.4667, 554.45, 681.3164, 2376.0668, 10353.0358], 
"May"=>[2.75, 34.6666, 342.1831, 1331.8999, 1589.617, 9282.9662], 
"July"=>[1.9, 2.3666, 59.45, 302.1501, 554.1652, 5195.0839], 
"June"=>[0.15, 24.2166, 244.1498, 335.6834, 536.067, 1498.949], 
"August"=>[0.0, 0.4, 9.3668, 30.7164, 67.7504, 162.0337], 
"April"=>[0.0, 8.3, 68.9331, 357.9168, 815.9662, 2870.217]
 }

Любые идеи будут великолепны, спасибо

Ответы [ 2 ]

20 голосов
/ 12 августа 2011

Ruby с версии 1.9 (выпущенной в декабре 2007 г.) поддерживает порядок хеширования (см .: http://www.igvita.com/2009/02/04/ruby-19-internals-ordered-hash/)

Также для этого существует драгоценный камень под названием orderhash для более старых Ruby.

8 голосов
/ 12 августа 2011

Можно сохранить список на стороне, содержащей ключи в отсортированном порядке

изначально:

hash = {}
keys = []

при вставке:

def insert(key, value)
  keys << key unless hash[key]
  hash[key] = value
end

для повторения при вставкезаказ:

for key in keys do
  puts key, hash[key]
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...