条件によるソートもあるのですが、それは追々…。
sort
数字
> a = [1,4,2,5,7,3,6,8,9]文字列
=> [1, 4, 2, 5, 7, 3, 6, 8, 9]
> a.sort
=> [1, 2, 3, 4, 5, 6, 7, 8, 9]
> b = ["e","c","a","b","d"]
=> ["e", "c", "a", "b", "d"]
> b.sort
=> ["a", "b", "c", "d", "e"]
sort_by
多重配列
> c = [[2,"b"],[1,"a"],[3,"c"],[2,"a"]]多重ソート
=> [[2, "b"], [1, "a"], [3, "c"], [2, "a"]]
> c.sort_by{|item| item[0]}
=> [[1, "a"], [2, "b"], [2, "a"], [3, "c"]]
上記の場合だと、同じ値の時、[2, "b"], [2, "a"]になっています。
これを[2, "a"], [2, "b"]2つめもキーにしてソートしたい場合は
配列で順番を指定します。便利!
> c = [[2,"b"],[1,"a"],[3,"c"],[2,"a"]]c.sort でもできるけど、想定通りになるかは…?
=> [[2, "b"], [1, "a"], [3, "c"], [2, "a"]]
> c.sort_by{|item| [item[0],item[1]]}
=> [[1, "a"], [2, "a"], [2, "b"], [3, "c"]]
> c.sort
=> [[1, "a"], [2, "a"], [2, "b"], [3, "c"]]
降順ソート
単一配列
> a.sort.reverse多重配列
=> [9, 8, 7, 6, 5, 4, 3, 2, 1]
> b.sort.reverse
=> ["e", "d", "c", "b", "a"]
1項目は降順、2項目は昇順の場合
> c.sort_by{|item| [-item[0], item[1]]}
=> [[3, "c"], [2, "a"], [2, "b"], [1, "a"]]
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。