将元素插入新数组然后从旧数组中删除,一些元素被忽略

时间:2015-04-21 05:41:53

标签: ruby arrays

我正在尝试从Array中删除最小和最大元素对,并将它们存储在第二个元素中。有没有更好的方法来做这个或我不知道的Ruby方法可以做到这样的事情?

这是我的代码:

nums = [1, 2, 3, 4, 5, 6]
pairs = []; for n in nums
  pairs << [n, nums.last]
  nums.delete nums.last
  nums.delete n
end

目前的结果:

nums
#=> [2, 4]
pairs
#=> [[1, 6], [3, 5]]

预期结果:

nums
#=> []
pairs
#=> [[1, 6], [2, 5], [3, 4]]

2 个答案:

答案 0 :(得分:5)

假设nums已排序且可以修改,我喜欢这种方式,因为它具有机械感:

pairs = (nums.size/2).times.map { [nums.shift, nums.pop] }
  #=> [[1, 6], [2, 5], [3, 4]] 
nums
  #=> []

我看到@Drenmi使用shiftpop的想法相同。

如果您不想修改nums,您当然可以在副本上进行操作。

答案 1 :(得分:1)

通过Array枚举,同时删除内容通常是不可取的。这是另一种解决方案:

nums = *(1..6)
#=> [1, 2, 3, 4, 5, 6]

pairs = []
#=> []

until nums.size < 2 do
  pairs << [nums.shift, nums.pop]
end

pairs
#=> [[1, 6], [2, 5], [3, 4]]