grepとsort_byメソッド・Enumerableモジュール

スポンサーリンク
スポンサーリンク
ライフスタイル関連のコンテンツ
お金 | 仕事 | 勉強 | プライベート | 健康 |
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般

Enumerableモジュールには、eachメソッドを用いて定義されている、多数のイテレータ・ブロック処理のためのメソッドが含まれます。
Enumerableモジュールをインクルードしているクラスならば、これらの便利なメソッドを使えます。

スポンサーリンク

参考:Enumerable – Rubyリファレンスマニュアル

以下のファイルを処理し、Enumerableモジュールに含まれるgrepとsort_byの動作を確認します。

lang.dat

Ruby, Java
Perl, PHP, JavaScript
COBOL, C++, Python

スクリプトは以下の通り。
最初のgrepを用いた文は、イテレータを後方に渡し続ける処理でちょっと複雑になっていますが、イメージとしては最初にオープンしたFileオブジェクトを、後ろに行くにつれて処理を連結していく感じです。
こんな書き方ができるのは、Rubyのパワフルさを実感できます。

ary = []
File.open("lang.dat").each{|line|        # 1行ずつ読み込む
    # 読み込んだ行を「, 」でsplitし、PまたはRではじまる配列の要素値を取り出す
    line.split(/, /).grep(/^P|^R/){|item|
        item.upcase        # PまたはRではじまるパターンにマッチした配列の要素値を大文字にする
    }.each{|item|
        ary.push(item)    # 新しい配列にpushしていく
    }
}
p ary
 
# aryを文字列の長さでソート
new_ary = ary.sort_by{|item|
    item.length
}
p new_ary

実行結果。

["RUBY", "PERL", "PHP", "PYTHON"]
["PHP", "RUBY", "PERL", "PYTHON"]
スポンサーリンク
 
スポンサーリンク