Hatena::Grouprubyist

Ruby初心者prinyの学習帳 RSSフィード

2009-01-15練習:たのしいRuby

P.203 (1) square メソッドを定義する

17:57

数値からなる配列 nums に対して、その個々の要素を自乗した要素からなる
配列を返すメソッド square を 3 通りの方法で定義しましょう。

(a) collect を使う

def square1(nums)
  nums.collect{|i| i**2 }
end

nums = [1, 3, 5, 7, 9]
p square1(nums)

実行結果

[1, 9, 25, 49, 81]

(b) collect は使わず、each を使う

def square2(nums)
  result = []
  nums.each{|i|
    result << i**2
  }
  return result
end

nums = [2, 4, 6, 8, 10]
p square2(nums)

実行結果

[4, 16, 36, 64, 100]

(c) collecteach も使わず、インデックスと[ ]を使う

def square3(nums)
  nums.each_index{|index|
    nums[index] **= 2
  }
end

nums = [1, 9, 25, 49, 81]
p square3(nums)

実行結果

[1, 81, 625, 2401, 6561]

holysugarholysugar2009/01/15 18:41square3 は、引数を直接書き換えてるので nums が変わってしまってるのに注意。意図してないなら dup しましょう。

prinypriny2009/01/16 12:16コメントをありがとうございます。

引数 nums を書き換えることは意図したことではないです。手元のものは以下のように修正しました。
def square3(nums)
copy = nums.dup
copy.each_index{|index|
copy[index] **= 2
}
end

蛇足ですが、square3 は、最初はこんなふうに書いていました。
def square3(nums)
indexes = (0...nums.size).to_a
result = []
while index = indexes.shift
result << nums[index] ** 2
end
return result
end

これなら、nums を書き換えてはいなかったです。
インデックスの配列をわざわざつくらなくても、Ruby にはインデックスに対して何かをするメソッドがあるのではと思っていたところ、Array#each_index を見つけ、これを使いました。
マニュアルを読んで使い方を理解したつもりだったのですが、まだまだですね。

JaylynJaylyn2011/09/07 23:20For the love of God, keep wrtinig these articles.

dpjpqedpjpqe2011/09/08 17:10ixKdgy <a href="http://xdjlmaumrzcn.com/">xdjlmaumrzcn</a>

imxcoxzuoaimxcoxzuoa2011/09/08 21:20BJJecy , [url=http://iqgvfnjxkrzr.com/]iqgvfnjxkrzr[/url], [link=http://sfennuokytve.com/]sfennuokytve[/link], http://fqcppptoavml.com/

ddoswzjzmlfddoswzjzmlf2011/09/10 22:29WSfJpC , [url=http://vvcezykqtqef.com/]vvcezykqtqef[/url], [link=http://swrdvfffiyzf.com/]swrdvfffiyzf[/link], http://cuhxnihbjgsq.com/