сортировка хэша по одному из ключевых значений - PullRequest
2 голосов
/ 29 марта 2012

У меня есть @hash, который выглядит так:

[1, {:clid=>1, :nvz=>4, :tip=>"IP", :name=>"Mark", :record=>"some text"}] 
[2, {:clid=>2, :nvz=>-5, :tip=>"AO", :name=>"Tom", :record=>"another text"}] 
[3, {:clid=>3, :nvz=>0, :tip=>"AO", :name=>"Pit", :record=>"another text"}] 

Как мне отсортировать этот хэш, чтобы итерации были упорядочены по :nvz и выглядели так:

[2, {:clid=>2, :nvz=>-5, :tip=>"AO", :name=>"Tom", :record=>"another text"}] 
[3, {:clid=>3, :nvz=>0, :tip=>"AO", :name=>"Pit", :record=>"another text"}] 
[1, {:clid=>1, :nvz=>4, :tip=>"IP", :name=>"Mark", :record=>"some text"}] 

1 Ответ

3 голосов
/ 29 марта 2012

Как я понимаю, оригинальный хеш выглядит так?

{
  1 => {:clid=>1, :nvz=>4, :tip=>"IP", :name=>"Mark", :record=>"some text"},
  2 => {:clid=>2, :nvz=>-5, :tip=>"AO", :name=>"Tom", :record=>"another text"},
  3 => {:clid=>3, :nvz=>0, :tip=>"AO", :name=>"Pit", :record=>"another text"}
}

Если это правда, попробуйте это

@hash.sort_by{ |k,v| v[:nvz] }

PS

Поскольку ваш исходный хеш имеет NON INTEGER nvz ('n'), вам следует преобразовать его в целое число:

@hash.sort_by{ |k,v| v[:nvz].to_i }

PPS

Если вам нужно отсортировать n как 999:

@hash.sort_by{ |k,v| v[:nvz] == 'n' ? 999 : v[:nvz] }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...