如何从最后一个元素开始遍历数组? (红宝石)
Posted
技术标签:
【中文标题】如何从最后一个元素开始遍历数组? (红宝石)【英文标题】:How to iterate through an array starting from the last element? (Ruby) 【发布时间】:2011-01-21 17:10:54 【问题描述】:我提供了以下解决方案,但我相信那一定是更好的解决方案......
array = [ 'first','middle','last']
index = array.length
array.length.times index -= 1; puts array[index]
【问题讨论】:
【参考方案1】:如果你想在不使用反向的情况下达到同样的效果[有时这个问题出现在面试中]。我们需要使用基本逻辑。
-
数组可以通过索引访问
将索引设置为数组的长度,然后减1,直到索引达到0
输出到屏幕或新数组或使用循环执行任何逻辑。
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"]
【讨论】:
为什么不只使用 reverse_each?【参考方案2】:如果您想反向遍历一个范围,请使用:
(0..5).reverse_each do |i|
# do something
end
【讨论】:
#reverse_each
是否在内部执行反向操作?或者它只是从最后开始并向后工作?如果是后者,这个答案可以实现比分别调用#reverse
和#each
更好的时间复杂度,因为#reverse
本质上是O(n log n) 的排序操作,而从最后一个到第一个计数与#each
在时间复杂度方面(即 O(n))。【参考方案3】:
在翡翠模板中你可以使用:
for item in array.reverse()
item
【讨论】:
【参考方案4】:你甚至可以使用 for 循环
array = [ 'first','middle','last']
for each in array.reverse do
print array
end
将打印
last
middle
first
【讨论】:
实际上它打印:["first", "middle", "last"]["first", "middle", "last"]["first", "middle", "last" ]【参考方案5】:鲁比很聪明
a = [ "a", "b", "c" ]
a.reverse_each |x| print x, " "
【讨论】:
【参考方案6】:array.reverse.each |x| puts x
【讨论】:
我知道nice
会有一些东西...谢谢。
其实reverse_each
更好,因为它不像reverse
那样复制数组。
是的,我也希望reverse_each
更好,尽管我还没有深入了解内部结构。
我刚刚做的一些算法的重要说明:.reverse
实际上会反转数组(返回一个新反转的数组,并且在迭代时你仍然会从前到后)。另一方面,.reverse_each
实际上会向后遍历而不实际反转数组。以上是关于如何从最后一个元素开始遍历数组? (红宝石)的主要内容,如果未能解决你的问题,请参考以下文章