ランダムに値を取得したかった
こんにちは、ぐっちと申します。
今回は学習中に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)