是否有一个特定的函数来检索然后删除随机数组元素?
我知道我可以通过几个步骤完成这项工作,但是想知道是否有能够实现这一目标的function。
我想数组#sample,然后删除检索到的元素。
这个怎么样:
array.delete_at(rand(array.length))
另一个低效的,但超级明显的是:
array.shuffle.pop
什么是好的将是Array本身的示例方法的破坏性版本,如:
class Array def sample! delete_at rand length end end
Linuxios的完美之处。 这是另一个例子:
array = %w[ABC] item_deleted = array.delete_at(1)
这是在irb:
1.9.2p0 :043 > array = %w[ABC] => ["A", "B", "C"] 1.9.2p0 :044 > item_deleted = array.delete_at(1) => "B" 1.9.2p0 :045 > array => ["A", "C"] 1.9.2p0 :047 > item_deleted => "B"
已经提到的rand(array.length)方法的替代方法可能就是这个方法
element = array.delete array.sample
Eksample:
>> array = (1..10).to_a >> element = array.delete array.sample >> array # => [1, 2, 4, 5, 6, 7, 8, 9, 10] >> element # => 3
这也是一组两个操作,但至少你不必离开数组本身。
如果您需要对多个项目进行采样并从原始数组中删除它们:
array = (1..10).to_a => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] grab = array.sample(4) => [2, 6, 10, 5] grab.each{ |a| array.delete a } => [2, 6, 10, 5] array => [1, 3, 4, 7, 8, 9]