hakeの日記

Windows環境でプログラミングの勉強をしています。

#sort

Rubyの勉強
Hashの各要素のソートの実験。ただsortを使用すればkeyによるソートが行われる? 値(val)やkey/valの組合せで評価したい場合は#sort_byを使用してブロックの中で評価の定義を記述する。ソート順は評価結果のオブジェクトの演算子<=>の定義による?

h = {"a" => 3, "b" => 1, "c" =>2, "d" => 0}

# key文字列を使用してのソート
p h.sort
    # => [["a", 3], ["b", 1], ["c", 2], ["d", 0]]
p h.sort.reverse
    # => [["d", 0], ["c", 2], ["b", 1], ["a", 3]]
p h.sort_by{|key|  -key[0].unpack("c")[0]}       # 1文字目のコードの逆順
    # => [["d", 0], ["c", 2], ["b", 1], ["a", 3]]


# valの値を使用してのソート
p h.sort_by{|key,val| val}
    # => [["d", 0], ["b", 1], ["c", 2], ["a", 3]]
p h.sort_by{|key,val| -val}
    # => [["a", 3], ["c", 2], ["b", 1], ["d", 0]]
p h.sort_by{|key,val| (val - 1.2)**2 }           # valが1.2に近い順
    # => [["b", 1], ["c", 2], ["d", 0], ["a", 3]]


# ランダムに並べ替え
p h.sort_by{rand}