Ten kod Ruby nie zachowuje się tak, jak bym się spodziewał:
# 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
Chcę posortować tablicę skrótów według klucza „wartość”, ale są one drukowane bez sortowania.
Array#sort_by!
jest nowy w Rubim 1.9.2. Dostępne dzisiaj dla wszystkich wersji Ruby, wymagając również mojegobackports
klejnotu :-)3,2,1
...sort_by
, ale użyjsort
lubsort!
i po prostu odwróć operandy: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
.Jak w @shteef, ale zaimplementowano z
sort!
wariantem zgodnie z sugestią:źródło
Chociaż Ruby nie ma
sort_by
wariantu w miejscu, możesz:Array.sort_by!
został dodany w 1.9.2źródło
Możesz użyć
sort_me.sort_by!{ |k| k["value"]}
. To powinno działać.źródło