Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

sortとブロック(Hash編)

ブロック処理はRubyのカッコイイ所の一つです。
配列やハッシュに付属しているsortメソッドも、ブロックを使った処理ができます。
今回は、これについて少し調べてみましたので簡単にまとめます。

uec = {:unique   => 0b101111,
          :exciting => 0x56, 
          :campus => 0xff, 
          :chofu    => 35}

というハッシュを使って、動作を見ていきます。*1

##昇順ソート(key)
> uec.sort{|a,b| a[0] <=> b[0]}
#=> [[:campus, 255], [:chofu, 35], [:exciting, 86], [:unique, 47]]

##降順ソート(key)
> uec.sort{|a,b| b[0] <=> a[0]}
#=> [[:unique, 47], [:exciting, 86], [:chofu, 35], [:campus, 255]]

##昇順ソート(value)
> uec.sort{|a,b| a[1] <=> b[1]}
#=> => [[:chofu, 35], [:unique, 47], [:exciting, 86], [:campus, 255]]

##降順ソート(value)
> uec.sort{|a,b| b[1] <=> a[1]}
#=> [[:campus, 255], [:exciting, 86], [:unique, 47], [:chofu, 35]]

異なる進数の数値はもちろん、文字列の並び替えまで対応しています。
やっぱりRubyは凄いですね。

12/12/01
なにやら盛大にコピペミスをしていたので修正……

*1:Ruby 1.9.3p194 にて確認しました