RubyでHashの整列は理解できたのですが,例えば,
- value で整列
- value が同じ値のときは,keyで整列
したいと思ったときに,どうすればいいか調べてみました。
まず,(1)の方法を試したのですが,Rubyの場合,a[1] <=> b[1]が0のときもor以降が実行されないので,却下。次に(2)の方法を考えました。これだと意図した動作をしますが,いろいろと調べたところ(3)の方法をWebで発見しました。
#!/usr/local/bin/ruby require 'pp' hash = { "sadowara" => "miyazaki", "nobeoka" => "miyazaki", "miyakonojou" => "miyazaki", "miyazaki" => "miyazaki", "amakusa" => "kumamoto", "hitoyoshi"=> "kumamoto", "kumamoto" => "kumamoto", "kagoshima" => "kagoshima", "sendai" => "kagoshima", } # (1) # pp hash.sort {|a, b| # a[1] <=> b[1] or a[0] <=> b[0] # } # (2) # pp hash.sort {|a, b| # if (a[1] <=> b[1]) == 0 # a[0] <=> b[0] # else # a[1] <=> b[1] # end # } # (3) pp hash.sort {|a, b| (a[1] <=> b[1]) * 2 + (a[0] <=> b[0]) }
以下を参考にしました。
面白い方法だなぁと思います。