はじめに
Rubyアルゴリズムを学習する際に作成したコードを解説します。
学んだ事
次の技術に挑戦しました。
- injectメソッド
- メソッド定義
挑戦したこと
10個ずつ数字を並べた二つの配列を使用します。
それぞれの配列の、1番目・1番目から2番目の和・3番目までの和…を比較し、
どちらが大きいか表示するコードを作成します。
内容
まずはなんでもいいので、配列を二つ用意します。
a = [1,2,3,4,5,6,7,8,9,10]
b = [10,2,2,2,2,2,2,2,2,2]
次に
配列の和を求めるメソッドを作ります。
色々方法はありますが、ここではinjectメソッドを使用します。
def sum(array,n)
sum = array[0,n].inject(:+)
return sum
end
array[0,n].inject(:+)
の部分では、引数として代入した配列の1番目からn+1番目の和を計算します。
最後に、上記の処理を配列の全ての要素に対して実行し、その度に大小を判定するようにします。
(1..10).each{|i|
if sum(a,i) > sum(b,i)
puts "#{i}:aが大きい"
elsif sum(a,i) < sum(b,i)
puts "#{i}:bが大きい"
else
puts "#{i}:等しい"
end
}
全てを合わせると下記の通りになります。
a = [1,2,3,4,5,6,7,8,9,10]
b = [10,2,2,2,2,2,2,2,2,2]
def sum(array,n)
ans = array[0,n].inject(:+)
return ans
end
(1..10).each{|i|
if sum(a,i) > sum(b,i)
puts "#{i}:aが大きい"
elsif sum(a,i) < sum(b,i)
puts "#{i}:bが大きい"
else
puts "#{i}:等しい"
end
}
以上です。
おわりに
今回のコードで新しくinjectメソッドの使い方を知ったほか、
メソッド返り値同士でも大小比較ができるという気付きが得られました。
今後も、新しい知識を得ていくと共に、既に知っている知識の新しい使い方を追求したいと思います。