2012-03-29 9 views
2

I @hash haben, die wie folgt aussieht:Sortier Hash von einem der Schlüsselwerte

[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"}] 

Wie kann ich diesen Hash sortieren, so dass Iterationen durch :nvz und sehen wie folgt bestellt werden:

[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"}] 
+0

Soll das ein Array von Arrays sein? Warum gibt es am Ende dieser Zeilen kein Komma? – jdl

+0

Ich habe gerade jede Iteration gezeigt. @hash sieht so aus: {1 => {: clid => 1,: tip => "IP",: name => "Mark",: record => "irgendein Text",: nvz => 0}, 2 = > {: clid => 2,: tip => "OO",: Name => "Tom",: record => "ein anderer Text",: nvz => - 10}, 3 => {: clid => 3 ,: tip => "IP",: Name => "b",: Datensatz => "und Text",: nvz => 4}, 4 => {: nvz => "n",: tip => " ТОО ",: name =>" c ",: record =>" no record "}} – antsav

Antwort

3

Wie ich verstehe Original Hash sieht so aus?

{ 
    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"} 
} 

Wenn true versuchen diese

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

PS

Soweit Ihre ursprünglichen Hash NICHT GANZ nvz ('n') erhalten hat, so sollten Sie es konvertieren integer:

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

PPS

Wenn benötigen Sie n als 999 sortieren:

@hash.sort_by{ |k,v| v[:nvz] == 'n' ? 999 : v[:nvz] } 
+0

sorry, rails sagt: Vergleich von Fixnum mit String fehlgeschlagen – antsav

+0

hast du die Antwort gelesen? Zeige deinen originalen Hash – fl00r

+0

{1 => {: clid => 1,: tip => "IP",: name => "Mark",: record => "irgendein Text",: nvz => 0}, 2 = > {: clid => 2,: tip => "OO",: Name => "Tom",: record => "ein anderer Text",: nvz => - 10}, 3 => {: clid => 3 ,: tip => "IP",: Name => "b",: Datensatz => "und Text",: nvz => 4}, 4 => {: nvz => "n",: tip => " ТОО ",: name =>" c ",: record =>" no record "}} – antsav