我想得到一个介于0和20之间的随机值,但是跳过3,就像python中的等价物:

random.randrange(0,20, 3)

最佳答案

这里有一行:

(0...20).to_a.keep_if {|z| z % 3 == 0}.sample

如果你让最上面的数字等于或大于等于3的第一个数字,即:
rand(21 / 3) * 3

但是,您必须根据您的切片大小和上限值手动设置上限值。
我的一行代码对我来说有点难看,如果我在整个程序中只在一个地方使用它,我可能会使用它。但如果我要重新使用它,我会做一个方法:编辑我只注意到@cremno在评论中回答。我比我更喜欢他们的版本我会用这个方法:
def randrange(lower, upper, grouping)
  (lower...upper).step(grouping).to_a.sample
end

我以前的方法…
def randrange(lower, upper, grouping)
  arr = (lower...upper).to_a.keep_if {|i| i % grouping == 0}
  arr.sample
end

关于ruby - 如何在Ruby中获得与python相当的randrange,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31665935/

10-12 07:28