本日の学習記録を、記録します。
sort_byメソッド, sortメソッド
指定した条件に基づいて、並び替えができる。
使い方
sort_byメソッド
数値配列の並び替え
example.rb
numbers = [3, 4, 5, 1, 2]
sorted_numbers = numbers.sort_by{ |number| numbers }
#任意の変数名(この中に並び替えられた配列が入る) = 配列が入っている変数名.sort_by{|ブロック変数|条件}
#デフォルトが昇順並び替え、降順にする際は{ |number| numbers }.reverseとする
p sorted_numbers # [1, 2, 3, 4, 5]
文字数の長さによって並び替え
example.rb
words = ["apple", "strawberry", "banana"]
sorted_words = words.sort_by{|word| word.length}
p sorted_words #["apple", "banana", "strawberry"]
ハッシュの配列を属性で並べ替える
example.rb
people = [
{name: "太郎", age: 20},
{name: "次郎", age: 18},
{name: "三郎", age: 16}
]
sorted_people = people.sort_by{|person| person[:age]}
p sorted_people # [{name: "三郎", age: 16}, {name: "次郎", age: 18}, {name: "太郎", age: 20}]
sortメソッド
数値配列の並び替え
example.rb
numbers = [3, 4, 5, 1, 2]
sorted_numbers = numbers.sort#変数名.sort
#数字の昇順に並び替え
p sorted_numbers # [1, 2, 3, 4, 5]
文字数の長さによって並び替え
example.rb
words = ["apple", "strawberry", "banana"]
sorted_words = words.sort
#アルファベットの昇順
p sorted_words #["apple", "banana", "strawberry"]
シンプルに降順にしたい場合は、reserveを指定する
変数名 = 配列が入っている変数名.sort.reserve
条件指定したい時は、<=>演算子を利用する
#文字の長さで並び替えの場合
変数名 = 配列が入っている変数名.sort{ |a,b| a.length <=> b.length }#昇順
変数名 = 配列が入っている変数名.sort{ |a,b| b.length <=> a.length }#降順
特徴 | sort_by | sort |
---|---|---|
目的 | 特定の属性や計算結果に基づいて並び替え | 配列全体の並び替え |
使用方法 | そのまま使うか、比較ブロックを渡す | 並び替え基準をブロックで指定 |
速度 | sort は全体の比較を行うため、要素数が多いと遅くなることがある | sort_by は並び替え基準を先に計算するため、比較的高速 |
使い分けのポイント
・並び替えが簡単な場合(例:数値やアルファベット順):sort を使う
・特定の基準で並び替えたい場合(例:オブジェクトのプロパティに基づく並び替え):sort_by の方が効率的
たとえば、文字列の長さで並び替える場合、sort_by が適していますが、通常の昇順で並び替えたいだけであれば sort がシンプルで良い選択です。