0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Ruby] 配列から要素を取り出しての計算

Posted at

一言

今日からまた朝活復活
朝活続けるためにルールで自分縛り、Twitterで何かしら朝の活動をつぶやく

続けば良いが・・・。
それでは本題

配列から要素を取り出して計算

今日の投稿も以前に解いた問題の2回目に挑戦・・・。
今回のお達しは「配列内の数字を加算せよ。但し、配列内にある同じ数字は除外して計算。同じ数字は除外するので全部同じ数字の場合は0となる」

※出力例
number([3,3,3]) => 0
number([3,2,3]) => 2
number([3,4,3,6,7,9,3,2,5]) => 33

こんな感じに出せと。

で、重複した要素を取り出して足せばいいやと考え、「uniqメソッドとsumでいけるかな?」と思い、使ってみたが、結果できず・・・。

簡単にuniqメソッドについて解説

uniqメソッド
以下のような配列があるとする
a = [1,1,1,2,3,4,5,5,5]
uniqを使うことで、重複した数字を除き、新しい配列を返す
p a.uniq => [1,2,3,4,5]

参考 uniqメソッド 公式レファレンス

確かに重複は取り除けたけれども・・・重複していた数字はすっきりはしたものの1つは残っちゃってて、一緒に加算してしまうから結果思い通りの出力ができない。

回答拝見

def number(nums)
 new_array=[] #取り除いた配列を新しい配列に入れる用

 nums.each do |num|
  i = 0
  nums.each do |n| 
   if num == n 
    i += 1
   end
  end
#①[4,5,4]だとまず最初は「num=4,5,4」となる
#最初のnumは「num=4」となり、nが「n=4,5,4」となる
#次にnumは「num=5」となり、nが「n=4,5,4」
#最後にnumは「num=4」となり、nが「n=4,5,4」
#numとnが同じ数字の時にカウントされる(重複した時)

  if i < 2
   new_array << num
  end
#iのカウントが1の場合は条件に合うので、[new_array]という配列に追加される。
#iのカウントが2の場合は条件に合わない(4は[i=2]となる)

 end
  sum = 0
  new_array.each do |i|
    sum += i
  end
#new_array配列内の合計

  puts sum #出力
end

 number([4,5,4]) => 5
 number([3,4,3,6,7,9,3,2,5]) => 33 

もっとシンプルにできないか、ない頭で考えたが頑張って最後の計算をsumメソッドを使うくらいしか思いつかず・・・。

puts new_array.sum

こんな感じ

もっと簡単に出せたり、簡単じゃなくても他の方法があればコメントいただけると嬉しいです。

0
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?