私はハッシュを持っています: {"spider" => 213, "frog" => 128, "apple" => 812}
.
配列に変換せずに値を降順で並べ替えるにはどうすればよいですか? したがって、{"apple" => 812, "spider" => 213, "frog" => 128}
それを配列にせずに変更します。
試してみまし.sort_by
たが、配列に変換されます。
Ruby 1.9 では、「ハッシュは、対応するキーが挿入された順序で値を列挙する」ため、正しい方法で挿入するようにしてください。
Hash[h.sort_by { |_, v| -v }]
#=> > {"apple"=>812, "spider"=>213, "frog"=>128}
ハッシュ自体をソートする必要がありますか、それともその内容をソート順に操作する必要がありますか? 後者の場合、このスニペットは機能します。
myhash.keys.sort.each { |k| .... do something with myhash[k] .... }
私が見ることができる唯一のアプローチは、最初にソートされた順序でハッシュを単純に入力することを除いて、中間配列を使用することです。
Hash[myhash.sort]
しかし、プログラマーは中間状態を「見る」ことはありません。ハッシュに対して sort メソッドを使用すると、ハッシュが配列のソート済み配列に変換され、 #[] メソッドが配列を強制的にハッシュに変換します。少なくとも Ruby-1.9.3 では。
したがって、質問は無関係ではありません。しかし、なぜ?再注文とはどういう意味ですか?その場で再注文しますか?何をするにしても、どういうわけかハッシュから値を抽出する必要があります。なぜ配列を恐れているのですか?小さなハッシュがRubyで配列として実装されていることをご存知ですか?(または2.0になりますか?)Matzは、意図的にハッシュにsortメソッドを追加することを控えました。私は、このトピックに関する彼の投稿を読みました...