2010-02-27 12 views

Respuesta

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

sabía que iba a ser algo 'nice' ... Gracias. – Radek

+55

En realidad, 'reverse_each' es mejor porque no hace una copia de la matriz como' reverse'. –

+2

Sí, también esperaría que 'reverse_each' sea mejor, aunque no me he metido en el interior para verlo por mí mismo. –

83

Ruby es inteligente

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

puede incluso utilizar un bucle

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

imprimirá

last 
middle 
first 
0

En una plantilla de jade puede utilizar:

for item in array.reverse() 
    item 
3

En caso de que desee iterar a través de una serie en sentido inverso a continuación, utilizar:

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

¿'' reverse_each' realiza una operación inversa internamente? ¿O simplemente comienza al final y funciona al revés? Si es este último, esta respuesta podría lograr una mejor complejidad de tiempo que la primera llamada '# reverse' y luego' # each' por separado, ya que '# reverse' es esencialmente una operación de clasificación de O (n log n) mientras se cuenta de último a primero lo mismo que '# each' en términos de complejidad de tiempo (es decir, O (n)). –

0

Si quieres conseguir el mismo sin utilizar reverso [A veces esta pregunta viene en entrevistas]. Necesitamos usar lógica básica.

  1. matriz se puede acceder a través de índice de
  2. establece el índice a la longitud de la matriz y luego disminuye por 1 hasta índice llega a 0
  3. salida a pantalla o una nueva matriz o utilizar el bucle para realizar cualquier lógica .

    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"] 
    
Cuestiones relacionadas