是否有一个特定的函数来检索然后删除随机数组元素?

Dam*_*che 8 ruby

我知道我可以通过几个步骤完成这项工作,但是想知道是否有一个能够实现这一目标的功能.

我想数组#sample,然后删除检索到的元素.

Lin*_*ios 25

这个怎么样:

array.delete_at(rand(array.length))
Run Code Online (Sandbox Code Playgroud)


mic*_*pam 12

另一个低效的,但超级明显的是:

array.shuffle.pop
Run Code Online (Sandbox Code Playgroud)

什么是好的将是Array本身的示例方法的破坏性版本,如:

class Array
  def sample!
    delete_at rand length
  end
end
Run Code Online (Sandbox Code Playgroud)

  • 底线:类似于您的第二个示例(尽管在实现解释器的语言中)应该是核心Array实现的一部分.我可能会称它为"delete_sample!"之类的东西,但是,我发现它更明显它的作用.:-) (3认同)
  • 如果你选择这个选项,并且想要从原始数组中删除该项,你最好使用`array.shuffle!.pop`,否则你的数组将保持不变.做shuffle`没有爆炸(!)只会给你另一个数组'pop`. (3认同)