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

Eth*_*ins 1 ruby arrays

我正在尝试从a中删除最小和最大元素对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
Run Code Online (Sandbox Code Playgroud)

目前的结果:

nums
#=> [2, 4]
pairs
#=> [[1, 6], [3, 5]]
Run Code Online (Sandbox Code Playgroud)

预期结果:

nums
#=> []
pairs
#=> [[1, 6], [2, 5], [3, 4]]
Run Code Online (Sandbox Code Playgroud)

Car*_*and 5

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

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

我看到@Drenmi有同样的想法使用shiftpop.

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

  • @Gagan,谢谢.我的编辑地址是否指出?我有点困惑,因为我不知道Ethan的"输出"是否是他得到的错误答案或他想要的结果.我认为这是前者. (2认同)