我知道我可以通过几个步骤来做到这一点,但想知道是否有一个功能可以实现这一点。
我想数组#sample,然后删除检索到的元素。
这个怎么样:
array.delete_at(rand(array.length))
另一个低效的,但非常明显发生了什么:
array.shuffle.pop
最好是 Array 本身的示例方法的破坏性版本,例如:
class Array
def sample!
delete_at rand length
end
end
Linuxios 完美无缺。这是另一个例子:
array = %w[A B C]
item_deleted = array.delete_at(1)
这是在irb中:
1.9.2p0 :043 > array = %w[A B C]
=> ["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
样品:
>> 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]