2 Stimmen

Hash nach einem der Schlüsselwerte sortieren

Ich habe @hash das so aussieht:

[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 so sortieren, dass die Iterationen nach :nvz und sehen wie folgt aus:

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

3voto

fl00r Punkte 81243

Soweit ich weiß, sieht der ursprüngliche Hash wie folgt 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"}
}

Falls zutreffend, versuchen Sie dies

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

PS

Soweit Ihre ursprüngliche Hash hat NON INTEGER nvz ('n'), so sollten Sie es in Ganzzahl konvertieren:

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

PPS

Wenn Sie sortieren müssen n como 999 :

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X