我想获得一个介于 0 和 20 之间的随机值,但跳过 3,就像 python 等效于:
random.randrange(0,20, 3)
这是一个单行:
(0...20).to_a.keep_if {|z| z % 3 == 0}.sample
并且 bjhaid 的示例将起作用,如果您使顶部数字成为第一个等于或大于 3 的数字,即:
rand(21 / 3) * 3
但您必须根据切片大小和上限值手动设置上限值。
我的单行代码对我来说有点难看,如果我只在整个程序的一个地方使用它,我可能会使用它。但如果我要重新使用它,我会制定一个方法:编辑 我刚刚注意到评论中的@cremno 回答。我比我的更喜欢他们的 step
版本。我会在一种方法中使用它:
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
我是一名优秀的程序员,十分优秀!