カブらない数字を4桁だすのまとめ

カブらない数字を4桁だすの - $ dropdb 人生
http://d.hatena.ne.jp/dropdb/20071109/1194535114


ひとつの事をするのに随分いろんなパターンがあるんだなぁ。

ary = []		#空の配列です。
4.times{		#4回繰り返して
  n = rand 10	#0-9までの乱数を発生させ配列に入れる。
  redo if ary.include? n	#既に配列にnがあった場合はもう1度
  ary.push n
}
print ary

redo は制御構造でヘルプには

ループ条件のチェックを行なわず、現在の繰り返しをやり直します。

とある。

別回答

nums = (0..9).to_a
4.times do
  print nums.delete_at(rand(nums.size))
end

先に0から9までの配列を作っておいて、そこからランダムに一つずつ取り出すイメージ。

to_a

オブジェクトを配列に変換してその配列を返します。
普通に配列に変換できないオブジェクトは、自身のみを含む長さ 1 の配列に変換されます
(ruby 1.7 feature: Object のこのメソッドは将来なくなるかもしれません。1.7 では警告が出ます)。

1.8では

ruby 1.8 feature: 多重代入の右辺に * を伴ったオブジェクトが現れた場合、そのオブジェクトが to_a を定義していればその結果が利用されます。 to_a が定義されていない場合は、右辺が自身を含む長さ 1 の配列に変換された後で代入が行われます。

class Foo
  def to_a
    [1, 2, 3]
  end
end

a, b, c = *Foo.new
p [a, b, c]

# => [1, 2, 3]

コメント欄から

p (0..9).sort_by{rand}[0,4]

0から9までの数字をばらばらに並べ替えて、あたまから4をとる、という感じです。

人のコードは勉強になりますね。
どう書く?org http://ja.doukaku.org/
にも お題とコードがたくさんあります。