uniqメソッド /車輪の再発明

こんばんは、NUKEDOです。

本日解いたドリルの問題について書こうと思ったのですが

「これそのまま載せるとカリキュラムを転載した扱いになって

 スクールの規約違反になるのでは?」

と思ったので、ツイッターで流れてきたメソッド紹介と自分なりのドリル解答、

紹介したメソッドを自分で作ったらどうなるかを書いていこうと思います。

 

uniqメソッド

Array#uniq (Ruby 2.7.0 リファレンスマニュアル)

配列内で重複してる部分を取り除いた新しい配列を作成するメソッドです。

例を挙げると、

ary = [1, 2, 2, 3, 5, 3]

puts ary.uniq  # => [1, 2, 3, 5] 

となります。

 

あれ、このメソッド今日のドリルに使えなくないか?今日のドリルで出た問題は、

「配列内でかぶった数字を除いて合計値を出せ」って問題だったんですが。

同じスクールに同日入校した人がドリル終了のタイミングで

ツイートしてたんで、てっきり使って解答できるのかと思ったんですけど…

 

まあそれはさておき。

今日の問題を上記の配列で計算すると、2と3はかぶってるので、

1+5で6が出力されることになりますね。

 

今日の問題の自分の回答がこちら↓

f:id:NUKEDO:20201119220850p:plain

ちょっと冗長だしわかりにくいと思ったので補足コメントも書きました。

ループ文内にループ文が作られているので、リファクタリングして

もっと見やすくするべきですかね。

カリキュラムの模範解答では、aryの要素を一つ取り出し、

ary配列内の全てと比較して2回以上出現していなければchecked配列内に格納する

という書き方でした。

 

続いてuniqメソッドを自分なりに作って見た場合の解答がこちらになります↓

f:id:NUKEDO:20201119234230p:plain

こちらはドリルの模範解答を参考にしつつ作成しました。

(21行目の線はカーソルです)

書いていて気になったのはbreakでどこまで抜けてしまうのか、ですね。

ループ分から脱出するよう記述しましたが、if文が多いためわかりにくいですね。

7から17行目までを別メソッドにしたほうが読みやすいかもしれません。

もっといい作成方法もあるのかも?

 

自力でメソッドを作るのはそこそこ考えました。

メソッドを知っていればこんな必要はないので、知識を増やしていきたいと思います。

Rubyの検定試験というものがあるので、そちらを勉強していけば

自然と増えていくのでしょうか?

就職にも有利になりますし資格勉強もしていくつもりです。

 

参考

docs.ruby-lang.org