はじめに
本記事は、プログラミングの学習を始めて1ヶ月の初学者が、学習を進めていて疑問に思った点について調べた結果を備忘録も兼ねてまとめたものです。
そのため、記事の内容に誤りが含まれている可能性があります。ご容赦ください。
間違いを見つけた方は、お手数ですが、ご指摘いただけますと幸いです。
今回の疑問点
今回の疑問点は、
sortメソッドについて
です。
以前、いいね数の多い順に投稿を表示させる機能を実装している際に上記について疑問を持ちました。
疑問点についての解説
###結論
sortメソッドは、配列やハッシュの中身を並び替えることができるメソッド。
###sortメソッドの使い方
記述方法は以下の通りです。
####昇順
ary1 = [9, 7, 10, 11, 8,14,1]
p ary1.sort
#=> [1,7,8,9,10,11,14]
ハッシュに対してsortメソッドを使うとバリュー(値)ではなく、キーが昇順でソートされます。
また、戻り値はハッシュではなく、二次元配列(配列の中に要素として配列が格納された形)となります。
戻り値をハッシュにしたい場合には下の記述にto_hメソッドを追記する必要があります。
h = { "jkl" => 2, "xyz" => 1, "abc" => 3 }
p h.sort
#=> [["abc", 3], ["jkl", 2], ["xyz", 1]]
ハッシュのバリュー(値)に対して昇順でソートする場合は以下のように記述します。
h = { "jkl" => 2, "xyz" => 1, "abc" => 3 }
p h.sort_by{ | key, value | value }
#=> [["xyz", 1], ["jkl", 2], ["abc", 3]]
上記以外にブロック構文を用いて昇順にするには以下の通りです。
ary1 = [9, 7, 10, 11, 8,14,1]
p ary1.sort { |a, b| a <=> b }
#=> [1,7,8,9,10,11,14]
####降順
昇順にreverseメソッドを追記することで降順にすることができます。
ary1 = [9, 7, 10, 11, 8,14,1]
p ary1.sort.reverse
#=> [14,11,10,9,8,7,1]
ブロック構文を用いて降順にするには以下の通りです。
ary1 = [9, 7, 10, 11, 8,14,1]
p ary1.sort { |a, b| b <=> a }
#=> [14,11,10,9,8,7,1]
a
とb
を逆にします。
まとめ
最後にポイントをまとめます。
- sortメソッドは、配列やハッシュの中身を並び替えることができるメソッドである
- sortメソッドは昇順。reverseメソッドを用いることで降順にすることができる
- ブロック構文を用いる場合には、宇宙船演算子(
<=>
)の左辺と右辺の値を入れ替えることで降順にできる