删除并返回数组中的所有项

时间:2013-09-27 22:32:28

标签: ruby

是否有一个帮助方法从数组中删除所有项目并在ruby中返回这些项目?

例如,

array = [{:a=>1, :b=>2},{:a=>3,:b=>4},{:a=>5,:b=>6}]

我想删除所有数组元素并返回它们以便我可以对这些元素进行一些处理吗?

2 个答案:

答案 0 :(得分:3)

使用Array#shift执行以下操作,一次删除数组内容并返回其元素:

array = [{:a=>1, :b=>2},{:a=>3,:b=>4},{:a=>5,:b=>6}]
array.shift(array.size)
# => [{:a=>1, :b=>2}, {:a=>3, :b=>4}, {:a=>5, :b=>6}]
array
# => []

如果您想逐个删除,可以使用Array#delete_if执行以下操作:

array = [{:a=>1, :b=>2},{:a=>3,:b=>4},{:a=>5,:b=>6}]
array.delete_if do |e|
    #do your work with e
    true
end
array # => []

另一种方法是首先使用数组完成工作,然后删除数组中的所有元素:

array = [{:a=>1, :b=>2},{:a=>3,:b=>4},{:a=>5,:b=>6}]
array.each do |e|
    #do your work with e
end
array.clear
array # => []

答案 1 :(得分:2)

array = [{:a=>1, :b=>2},{:a=>3,:b=>4},{:a=>5,:b=>6}]
while element = array.pop do
  # process element however you like...
end
array    # => []

或使用shift而不是pop如果订单对您很重要。