@OscarRyz respuesta sobre aclararon mucho por mí sobre la cuestión de cómo funciona la clase, esp
{ |x, y| y <=> x }
Basado en mi conocimiento que estoy proporcionando aquí lo que el estado de la array sería después de cada comparación para los resultados de bloque anteriores.
Nota: Tienes la referencia de la impresión de los valores de parametros de bloque e1, e2 de ruby-forum
1.9.3dev :001 > a = %w(d e a w f k)
1.9.3dev :003 > a.sort { |e1, e2| p [e2, e1]; e2 <=> e1 }
["w", "d"]
["k", "w"]
["k", "d"]
["k", "e"]
["k", "f"]
["k", "a"]
["f", "a"]
["d", "f"]
["d", "a"]
["d", "e"]
["e", "f"]
=> ["w", "k", "f", "e", "d", "a"]
Un estado array supuso en tiempo de ejecución después de cada comparación:
[e2, e1] Comparsion Result Array State
["w", "d"] 1 ["w", "e", "a", "d", "f", "k"]
["k", "w"] -1 ["w", "e", "a", "d", "f", "k"]
["k", "d"] 1 ["w", "e", "a", "k", "f", "d"]
["k", "e"] 1 ["w", "k", "a", "e", "f", "d"]
["k", "f"] 1 ["w", "k", "a", "e", "f", "d"]
["k", "a"] 1 ["w", "k", "a", "e", "f", "d"]
["f", "a"] 1 ["w", "k", "f", "e", "a", "d"]
["d", "f"] -1 ["w", "k", "f", "e", "a", "d"]
["d", "a"] 1 ["w", "k", "f", "e", "d", "a"]
["d", "e"] -1 ["w", "k", "f", "e", "d", "a"]
["e", "f"] -1 ["w", "k", "f", "e", "d", "a"] (Result)
Gracias,
Jignesh
Creo que vale la pena agregar que '<=>' es un método definido en 'Comparable' y mezclado con' String'. 'Fixnum' y' Bignum' también definen '<=>'. Puede implementar '<=>' en cualquier clase donde la ordenación o las comparaciones sean necesarias. –
He resaltado la oración importante. xey serán 2 elementos de su matriz, elegidos por el algoritmo de ordenamiento en sí. – bltxd
Gracias. ¡Ahora lo entiendo! –