2010-02-27 4 views

Antwort

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

wusste, dass ich es nice' ... Danke etwas 'wäre. – Radek

+55

Eigentlich ist 'reverse_each' besser, weil es keine Kopie des Arrays macht, wie' reverse'. –

+2

Ja, ich würde auch erwarten, dass 'reverse_each' besser ist, obwohl ich nicht in die Interna gegraben habe, um es selbst zu sehen. –

83

Ruby-smart ist

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

Sie auch eine for-Schleife verwenden kann

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

druckt

last 
middle 
first 
0

In einer Jade-Vorlage können Sie verwenden:

for item in array.reverse() 
    item 
3

Falls Sie über einen Bereich in umgekehrter Richtung zu durchlaufen dann verwenden:

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

Führt '# reverse_each' intern eine umgekehrte Operation durch? Oder fängt es einfach am Ende an und arbeitet rückwärts? Im letzteren Fall könnte diese Antwort eine bessere Zeitkomplexität erreichen als zuerst "# reverse" und dann "# each" getrennt zu nennen, da "# reverse" im Wesentlichen eine Sortieroperation von O (n log n) ist, während vom letzten zum ersten gezählt wird das gleiche wie "# each" in Bezug auf die zeitliche Komplexität (dh O (n)). –

0

Wenn Sie das gleiche erreichen wollen, ohne reverse [Manchmal kommt diese Frage in Interviews]. Wir müssen grundlegende Logik verwenden.

  1. Array kann
  2. eingestellt den Index zur Länge des Arrays und dann dekrementiert um 1 bis Index 0 erreicht
  3. Ausgang zu screenen oder ein neues Array oder verwenden, um die Schleife durch Index zugegriffen werden, um jede Logik auszuführen .

    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"] 
    
Verwandte Themen