Rubyを使ったロジックの実装について学習しています。
今回は、並べ替えに関するロジックについてメモしていきます。
やりたいこと
テストの点数の降順で並べ替え、順位をつけて出力したい。
array = [["山田", 89],["菅野", 65],["田中", 59],["斉藤", 78],["竹下", 97]]
こんな感じで出力したい
1位: 竹下 97点
2位: 山田 89点
3位: 斉藤 78点
4位: 菅野 65点
5位: 田中 59点
補足
- 名前、点数の順番で、多重配列で保存されている。
- 降順は、数字の大きい方が上で、小さい方に向けて並べる。
完成コード
array = [["山田", 89],["菅野", 65],["田中", 59],["斉藤", 78],["竹下", 97]]
sort_array = array.sort{|a,b| b[1] <=> a[1]}
sort_array.each_with_index do |data, index|
puts "#{index + 1}位: #{data[0]} #{data[1]}点"
end
コードの解説
-
sort_array = array.sort{|a,b| b[1] <=> a[1]}
-
sort
メソッドを使い点数の降順になるように並べ替えている。 - 配列
array
を得点が高い順(降順)にソートして、その結果をsort_array
に格納している。 -
b[1] <=> a[1]
は、配列の要素bの得点とaの得点を比較して、bの得点がaの得点より大きければ1、等しければ0、小さければ-1を返す。
-
-
sort_array.each_with_index do |data, index| puts "#{index + 1}位: #{data[0]} #{data[1]}点" end
-
each
メソッドを使ってループ処理を作成していく。 - ここでは、
each_with_index
メソッドを使い、順位の数値も変数で出力している。
-
参考サイト