我正在尝试从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]]
答案 0 :(得分:5)
假设nums
已排序且可以修改,我喜欢这种方式,因为它具有机械感:
pairs = (nums.size/2).times.map { [nums.shift, nums.pop] }
#=> [[1, 6], [2, 5], [3, 4]]
nums
#=> []
我看到@Drenmi使用shift
和pop
的想法相同。
如果您不想修改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]]