【发布时间】:2011-01-21 17:10:54
【问题描述】:
我提供了以下解决方案,但我相信那一定是更好的解决方案......
array = [ 'first','middle','last']
index = array.length
array.length.times { index -= 1; puts array[index]}
【问题讨论】:
我提供了以下解决方案,但我相信那一定是更好的解决方案......
array = [ 'first','middle','last']
index = array.length
array.length.times { index -= 1; puts array[index]}
【问题讨论】:
如果你想在不使用反向的情况下达到同样的效果[有时这个问题出现在面试中]。我们需要使用基本逻辑。
输出到屏幕或新数组或使用循环执行任何逻辑。
def reverseArray(input)
output = []
index = input.length - 1 #since 0 based index and iterating from
last to first
loop do
output << input[index]
index -= 1
break if index < 0
end
output
end
array = ["first","middle","last"]
reverseArray array #outputs: ["last","middle","first"]
【讨论】:
如果您想反向遍历一个范围,请使用:
(0..5).reverse_each do |i|
# do something
end
【讨论】:
#reverse_each 是否在内部执行反向操作?或者它只是从最后开始并向后工作?如果是后者,这个答案可以实现比分别调用#reverse 和#each 更好的时间复杂度,因为#reverse 本质上是O(n log n) 的排序操作,而从最后一个到第一个计数与#each 在时间复杂度方面(即 O(n))。
在翡翠模板中你可以使用:
for item in array.reverse()
item
【讨论】:
你甚至可以使用 for 循环
array = [ 'first','middle','last']
for each in array.reverse do
print array
end
将打印
last
middle
first
【讨论】:
鲁比很聪明
a = [ "a", "b", "c" ]
a.reverse_each {|x| print x, " " }
【讨论】:
array.reverse.each { |x| puts x }
【讨论】:
nice会有一些东西...谢谢。
reverse_each 更好,因为它不像reverse 那样复制数组。
reverse_each 更好,尽管我还没有深入了解内部结构。
.reverse 实际上会反转数组(返回一个新反转的数组,并且在迭代时你仍然会从前到后)。另一方面,.reverse_each 实际上会向后遍历而不实际反转数组。