2010-02-27 2 views

ответ

45
array.reverse.each { |x| puts x } 
+0

Я знал, что будет что-то 'nice' ... Спасибо. – Radek

+55

На самом деле 'reverse_each' лучше, потому что он не делает копию массива как' reverse'. –

+2

Да, я также ожидал бы, что 'reverse_each' лучше, хотя я не ворвался внутрь, чтобы убедиться сам. –

83

Рубин умна

a = [ "a", "b", "c" ] 
a.reverse_each {|x| print x, " " } 
4

Вы можете даже использовать для цикла

array = [ 'first','middle','last'] 
for each in array.reverse do 
    print array 
end 

напечатает

last 
middle 
first 
0

В шаблоне нефрита вы можете использовать:

for item in array.reverse() 
    item 
3

В случае, если вы хотите перебрать диапазон в обратном направлении, то используйте:

(0..5).reverse_each do |i| 
    # do something 
end 
+0

Выполняет ли '# reverse_each' обратную операцию? Или это только начинается в конце и работает назад? Если последний, этот ответ мог бы обеспечить лучшую временную сложность, чем первый вызов '# reverse', а затем' # each' отдельно, так как '# reverse' - это, по сути, операция сортировки O (n log n), в то время как подсчет от последнего к первому так же, как '# each' с точки зрения временной сложности (то есть O (n)). –

0

Если вы хотите, чтобы достичь того же, без использования reverse [Иногда этот вопрос приходит в интервью]. Нам нужно использовать основную логику.

  1. массив может быть доступен через индекс
  2. установить индекс длины массива, а затем уменьшается на 1 до тех пор, пока индекс не достигнет 0
  3. вывод на экран или новый массив или использовать цикл для выполнения какой-либо логики ,

    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"] 
    
Смежные вопросы