[ruby]ハッシュのソートについてのメモ

なるほど、と思ったので自分の勉強メモ。rubyにおけるハッシュのソートについての考え方。

rubyでハッシュにいろいろデータを入れて取り出すとき、ソートして取り出したいよね、ということがよくある。
そうすると、ハッシュをソートしたいという発想が当然出てくるのだけれど、RubyにはHash::sortというメソッドそのものがない。

なぜか。そもそもハッシュというのは順序が保存されないもの([ruby-list:43857] Hashへの生成順は保障されないのか?)。なので、順番を並べ替えるソートという考え方に意味がない。(ソートしたってその順番通りに並ぶ保証がないのだから)

じゃあ、ハッシュのデータを順序どおりに取り出すときどうするか?そういうときは、順序が保存される配列に変換してからソートを行う。

irb(main):018:0> var = {
irb(main):019:1* 2=>"2",
irb(main):020:1* 1=>"1",
irb(main):021:1* 3=>"3"
irb(main):022:1> }
=> {1=>"1", 2=>"2", 3=>"3"}
#ね、順序が変わったでしょ?
irb(main):023:0> var_sorted_array = var.to_a.sort{|a,b|
irb(main):024:1* (a[0] <=> b[0])}
=> [[1, "1"], [2, "2"], [3, "3"]]

いったん配列にしたものをソートすることで、順序を決めて取り出すことができる。
使うときはこんなふうに。

irb(main):030:0> var_sorted_array.each{|var|
irb(main):031:1* p var[0]
irb(main):032:1> p var[1]
irb(main):033:1> }
1
"1"
2
"2"
3
"3"
カテゴリ:

トラックバック(0)

このブログ記事を参照しているブログ一覧: [ruby]ハッシュのソートについてのメモ

このブログ記事に対するトラックバックURL: http://mogya.com/mt/mt-tb.cgi/598

コメントする


画像の中に見える文字を入力してください。

このブログ記事について

このページは、 もぎゃが 2008年6月19日 23:23に書いたブログ記事です。

ひとつ前のブログ記事は「 会社を辞めようとおもったきっかけ 」です。

次のブログ記事は「 プログラマががんばって投資家の正体を説明するよ! 」です。

最近のコンテンツは インデックスページ で見られます。過去に書かれたものは アーカイブのページ で見られます。

Powered by
Movable Type