在Ruby中生成与其他数字不相等的数字?

Cha*_*oir 2 ruby random numbers

基本上我正在生成数字,它们不能等于我生成的任何其他数字.有没有更快的方法来做到这一点,因为它看起来有点荒谬.

谢谢

#possible generated values
x1 = 0
x2 = 1
x3 = 2

#generate co-ordinates
x4 = rand(7)
until x4 != x1 && x4 != x1+1 && x4 != x1+2 && x4 != x2 && x4 != x2+1 && x4 != x2+2 && x4 != x3 && x4 != x3+1 && x4 != x3+2 do
  x4 = rand(7)
end

#possible generated values
y1 = 0
y2 = 1
y3 = 2

y4 = rand(7)
until y4 != y1 && y4 != y1+1 && y4 != y1+2 && y4 != y2 && y4 != y2+1 && y4 != y2+2 && y4 != y3 && y4 != y3+1 && y4 != y3+2 do
  y4 = rand(7)
end
Run Code Online (Sandbox Code Playgroud)

Kel*_*lly 6

适用于Ruby 1.9+

(0..6).to_a.sample(x)
Run Code Online (Sandbox Code Playgroud)

或旧版本

(0..6).to_a.shuffle.take(x)
Run Code Online (Sandbox Code Playgroud)

x你想要的整数数量在哪里.由于rand(7)不包括数字7,您需要的范围比您传递的数字少一个rand.

显然你不能拿出比这个范围更多的数字.

  • 或者只是`(0..6).to_a.sample(x)`(对于ruby 2.0+,我认为) - docs:http://www.ruby-doc.org/core-2.1.5/Array. HTML#方法-I-样品 (2认同)