小编典典

反转数组而不在Ruby中使用循环

algorithm

我有一个编码挑战,要反转其中包含5个元素的数组。不使用反向方法怎么办?

码:

def reverse(array)
 array
end

p reverse(["a", 1, "apple", 8, 90])

阅读 286

收藏
2020-07-28

共1个答案

小编典典

您可以将数组视为堆栈,pop并将元素从头开始:

def reverse(array)
  rev = []
  rev << array.pop until array.empty?
  rev
end

或者,如果您不喜欢修改对象,请使用更多类似功能的函数reduce

def reverse(array)
  array.reduce([]) {|acc, x| [x] + acc}
end

卡里在评论中提到了有关性能。功能方法可能不是最快的方法,因此,如果您真的想快速进行操作,请创建一个buffor数组,然后从头开始添加所有项:

def reverse(array)
  reversed = Array.new(array.count)
  array.each_with_index do |item, index|
    reversed[-(index + 1)] = item
  end
  reversed
end
2020-07-28