我知道我可以通过几个步骤完成此操作,但想知道是否有可以实现此功能的功能。
我想数组#sample,然后删除检索到的元素。
答案 0 :(得分:25)
这个怎么样:
array.delete_at(rand(array.length))
答案 1 :(得分:12)
另一个低效的,但超级明显的是:
array.shuffle.pop
什么是好的将是Array本身的示例方法的破坏性版本,如:
class Array
def sample!
delete_at rand length
end
end
答案 2 :(得分:2)
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"
答案 3 :(得分:1)
已经提到的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
这也是一组两个操作,但至少你不必离开阵列本身。
答案 4 :(得分:0)
如果您需要对多个项目进行采样并从原始数组中删除这些项目:
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]