オルタナティブ・ブログ > 吉政忠志のベンチャービジネス千里眼 >

IT業界でベンチャービジネスの支援をしている執筆者が日々の活動ログと感じたことを、徒然なるままに書き綴っていきます。

志茂吉建氏のRubyコラム『配列の美学(2)』

»

Rails技術者認定試験運営委員会の吉政でございます。

私が企画したコラムの件です。Rails技術者認定試験運営委員会のオーナーでもあるヒューマンリソシアが志茂吉建氏のRubyコラム『配列の美学(2)』を公開しています。

今回の志茂様のRubyの美学コラムは前回の続きで配列の話です。Rubyらしいコードを書いてRubyをマスターしましょう!興味があるかたは是非!

###

rrayクラスのメソッド

Arrayクラスのメソッドはいくつもありますが、非常に便利なものが沢山あります。例えば、「injectメソッド」はその典型ではないでしょう か。例えば、1から100までの合計を計算したいとします。プログラムの条件として配列を利用することにすると、普通の言語では以下のようなプログラムに なると思います。配列を初期化して、eachメソッドで配列に順次アクセスして合計を表示しています。

リスト1

  1 # -*- coding:utf-8 -*-
  2
  3 n=1
  4 numbers = Array.new()
  5 while ( n <= 100 ) do
  6   numbers << n
  7   n += 1
  8 end
  9
 10 sum = 0
 11 numbers.each do |n|
 12   sum += n
 13 end
 14
 15 puts sum
injectメソッド

「injectメソッド」を利用すれば、リスト1の10行目から13行目は1行で済むのです。

リスト2(1行目から9行目はリスト1と同様)

 10 puts numbers.inject(:+)

更に、配列の表現方法を利用すると1から100まで合計の計算は実は1行で済みます。

リスト3(1から2行目はリストと同様)

  3 puts (1..100).inject(:+)

実に簡単ですね。「injectメソッド」は畳み込み処理を行います。畳込み処理とは、リスト1の10行目から13行目のような処理を言いますが、詳しくは、Rubyのリファレンス・マニュアル(http://doc.ruby-lang.org/ja/1.9.3/class/Enumerable.html)のinjectメソッドの説明を御覧ください。

(この続きは以下のコラム本文をご覧ください)
http://resocia.jp/column/343/

Comment(0)