Tampoco sé si hay alguna diferencia entre el código mío y ese, si cambiará en algo el resultado a corto o largo plazo.
La diferencia deberias tenerla clara ya que el propio nombre de las funciones
Reverse y
Sort indican su funcionalidad:
Reverse invierte el orden de los elementos de la secuencia.
Sort ordena los elementos de la secuencia, según el resultado de una evaluación entre los elementos.
En el código de
Code Academy la colección ya te la dan ordenada de manera ascendente:
libros.sort! { |primerLibro, segundoLibro| primerLibro <=> segundoLibro }
Entonces, si le haces un
Reverse lo que estás haciendo es invertir el orden de Ascendente a Descendente, por ese motivo y en este caso específico la solución de usar
Reverse sería perfectamente aplicable, sólo que
Code Academy no acepta esa solución por el motivo que sea (el motivo podría ser lo que ya epxliqué en mi comentario anterior).
Sigo sin entender muy bien ese código.
El operador
<=> toma dos objetos,
A y
B, los compara y devuelve
-1,
0, o
1:
Si
A es mayor que
B, devolverá
-1Si
B es mayor que
A, devolverá
1Si
A y
B son iguales, devolverá
0El algoritmo de ordenación utiliza el resultado de esa evaluación para determinar en que posición de la colección deben ir los elementos:
Si el resultado de la evaluación es
-1,
A debe posicionarse despues de
B.
Si el resultado de la evaluación es
1,
B debe posicionarse despues de
A.
Si el resultado de la evaluación es
0, no importa le orden.
Slaudos
EDITO:He escrito este ejemplo por si te ayuda a entenderlo mejor utilizando un bloque de código para una evaluación personalizada:
# -*- coding: WINDOWS-1252 -*-
col = [ "d", "a", "e", "c", "b" ]
ascendantCol =
col.sort {
|a, b|
case
when a > b
+1
when b > a
-1
else
0
end
}
descendantCol =
col.sort {
|a, b|
case
when a > b
-1
when b > a
+1
else
0
end
}
print "Ascendant : #{ ascendantCol.join(', ')}\n"
print "Descendant: #{descendantCol.join(', ')}\n"
__END__
Saludos