이 Ruby 코드는 예상대로 작동하지 않습니다.
# 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
키 “값”으로 해시 배열을 정렬하려고하지만 정렬되지 않은 상태로 인쇄됩니다.
답변
루비 sort
는 제자리에서 정렬되지 않습니다. (아마도 파이썬 배경 지식이 있습니까?)
Ruby에는 sort!
내부 정렬이 있지만 sort_by
Ruby 1.8에는 내부 변형이 없습니다 . 실제로 다음을 수행 할 수 있습니다.
sorted = sort_me.sort_by { |k| k["value"] }
puts sorted
Ruby 1.9 이상부터는 .sort_by!
내부 정렬에 사용할 수 있습니다.
sort_me.sort_by! { |k| k["value"]}
답변
@shteef에 sort!
따라 제안 된대로 변형으로 구현되었습니다 .
sort_me.sort! { |x, y| x["value"] <=> y["value"] }
답변
Ruby에는 sort_by
내부 변형 이 없지만 다음을 수행 할 수 있습니다.
sort_me = sort_me.sort_by { |k| k["value"] }
Array.sort_by!
1.9.2에서 추가되었습니다.
답변
사용할 수 있습니다 sort_me.sort_by!{ |k| k["value"]}
. 작동합니다.