30代プログラム初心者がWEBエンジニアになる

30代プログラム初心者が、WEBエンジニアになるまでの奮闘を書いていきます。

ランダムに値を取得したかった

こんにちは、ぐっちと申します。

今回は学習中にRubyで、重複しない様に値を取得したいと言う場面がありまして、ない頭をひねって自分でコードを書いてみました。

 

それがこちら

array_nums = []
while true do
num = rand(5) + 1
if array_nums.length == 5
break
elsif array_nums.include?(num)
 
else
puts "#{num}"
array_nums << num
end
end

考え方としては、

空の配列を作りrandメソッドで選ばれた数字を入れていく、その時に既に配列に同じ数字があれば、入れずに無いものが出るまでループを繰り返す。

配列の数と設定した数字 (画像では5 )が同じになれば終了する、と言うものです。

 

これで問題なく動くのですが、ちょっと調べてみたところ次の様なものを見つけました。

 

それがこちら

array_nums = [*1..5]
array_nums.count.times do |t|
puts array_nums.delete_at(rand(array_nums.count))
end

 こちらは、始めに配列に数字を入れ、ランダムに出た数字を抜いていくと言う考え方から生まれたコードです。

 

たった3行で同じ処理が出来ていて、考え方が違うとこんなにもコードが変わってしまい、プログラムは奥が深くおもしろいなと関心しました。

もっと勉強して読みやすいコードが書ける様になろう。

 

ここまで読んで下さり、ありがとうございました。

ツイッターで日々の学習をつぶやいています(@Yamaguc45844169