配列をソートする: Rubyのsort, sort!およびsort_byメソッド
Rubyのsort, sort! および sort_by メソッドは配列の要素を整理するのに非常に便利です。
この記事では、これらのメソッドの使用方法、特に配列内にクラスを定義した場合のソート方法について説明します。
基本的な使い方: sortとsort!
まずは、基本的な数値配列のソートから始めましょう。
ソースコード例: 数値配列のソート
1 2 3 4 5 6 |
numbers = [5, 3, 8, 6, 1] sorted_numbers = numbers.sort numbers.sort! puts "Sorted array with sort: #{sorted_numbers.join(', ')}" puts "Original array after sort!: #{numbers.join(', ')}" |
出力結果は以下の通りです。
出力結果
Sorted array with sort: 1, 3, 5, 6, 8
Original array after sort!: 1, 3, 5, 6, 8
KindleUnlimited会員であれば、全ての本をご覧頂けます。 配列、イテレータ、ブロックを理解すれば、Rubyプログラミングの世界が変わる 第1版
基本的な使い方: sort_by
sort_byメソッドは、特定の属性に基づいて配列の要素をソートするのに適しています。
例えば、各要素が属性を持つオブジェクトの場合に便利です。
ソースコード例: 属性に基づくソート
1 2 3 4 5 6 7 8 |
students = [ { name: "Tom", grade: 90 }, { name: "Lisa", grade: 85 }, { name: "John", grade: 95 } ] sorted_students = students.sort_by { |student| student[:grade] } sorted_students.each { |student| puts "#{student[:name]}: #{student[:grade]}" } |
出力結果は以下の通りです。
sort_byのブロック内の引数にソートしたい項目を指定します。
出力結果
Lisa: 85
Tom: 90
John: 95
クラスを含む配列のソート
次に、配列内にクラスのインスタンスが含まれている場合のソート方法を見てみましょう。
クラスの定義
まず、ソート対象となる簡単なクラスを定義します。
ソースコード例: クラスの定義
1 2 3 4 5 6 7 |
class Item attr_reader :name, :price def initialize(name, price) @name = name @price = price end end |
クラスを含む配列のソート
このクラスを使用して、配列をソートしてみましょう。
ソースコード例: クラスを含む配列のソート
1 2 3 4 5 6 7 8 9 10 |
items = [ Item.new("Apple", 100), Item.new("Banana", 50), Item.new("Cherry", 200) ] sorted_items = items.sort_by(&:price) puts "Sorted items by price:" sorted_items.each { |item| puts "#{item.name}: #{item.price}" } |
この例では、sort_byメソッドを使用して、各アイテムの価格に基づいて配列をソートしています。出力結果は以下の通りです
出力結果
Sorted items by price:
Banana: 50
Apple: 100
Cherry: 200
まとめ
Rubyのsort, sort!およびsort_byメソッドは、配列の要素を効率的に整理するのに役立ちます。特に、配列内にクラスのインスタンスが含まれる場合、sort_byメソッドを使用することで、特定の属性に基づいて簡単にソートすることが可能です。これらのメソッドを適切に使用することで、Rubyプログラミングの幅が広がります。
最後まで読んで頂き、ありがとうございました。少しでもお役にたてたなら幸いです!
こちらもCHECK
-
【Ruby rails】配列の要素をランダムにシャッフルする方法を徹底解説!
Rubyのshuffleとshuffle!メソッド:配列の要素をランダムに並べ替える Rubyにおいて、配列の要素をランダムに並べ替える機能は多くの場面で役立ちます。 shuffleとshuffle! ...
続きを見る