我有一个编码挑战,要反转其中包含5个元素的数组。不使用反向方法怎么办?
码:
def reverse(array) array end p reverse(["a", 1, "apple", 8, 90])
您可以将数组视为堆栈,pop并将元素从头开始:
pop
def reverse(array) rev = [] rev << array.pop until array.empty? rev end
或者,如果您不喜欢修改对象,请使用更多类似功能的函数reduce:
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