Este código Ruby não está se comportando como eu esperava:
# create an array of hashes
sort_me = []
sort_me.push({"value"=>1, "name"=>"a"})
sort_me.push({"value"=>3, "name"=>"c"})
sort_me.push({"value"=>2, "name"=>"b"})
# sort
sort_me.sort_by { |k| k["value"]}
# same order as above!
puts sort_me
Estou tentando classificar a matriz de hashes pela chave "valor", mas eles são impressos sem classificação.
Array#sort_by!
é novo no Ruby 1.9.2. Disponível hoje para todas as versões Ruby exigindo minhabackports
gema também :-)3,2,1
...sort_by
, mas usesort
ousort!
e simplesmente inverta os operandos:a.sort! {|x,y| y <=> x }
( ruby-doc.org/core-1.9.3/Array.html#method-i-sort )puts sorted = sort_me.sort_by{ |k,v| v }
.reverse
.De acordo com @shteef, mas implementado com a
sort!
variante conforme sugerido:fonte
Embora Ruby não tenha uma
sort_by
variante local, você pode fazer:Array.sort_by!
foi adicionado em 1.9.2fonte
Você pode usar
sort_me.sort_by!{ |k| k["value"]}
. Isso deve funcionar.fonte