Soy un principiante en Haskell así que por favor tengan paciencia conmigo. (¡Empecé a aprender ayer!) ¿Cómo puedo ordenar una lista de tuplas principalmente por sus primeros componentes (de mayor a menor) y secundariamente por sus segundos componentes (del más pequeño al más alto)? Un ejemplo de entrada/salida sería:En Haskell, ¿cómo puedo usar la función incorporada de sortBy para ordenar una lista de pares (tupla)?
[(1, "b"), (1, "a"), (2, "b"), (2, "a")]
(de entrada)
[(1, "a"), (2, "a"), (1, "b"), (2, "b")]
(paso intermedio)
[(2, "a"), (2, "b"), (1, "a"), (1, "b")]
(salida)
He intentado utilizar el siguiente pero dio la salida equivocada:
sortGT a b = GT
sortBy sortGT lst
Estoy seguro de que puedo hacer esto usando sortBy
solamente, pero no puedo entenderlo yo mismo. ¡Cualquier ayuda sería muy apreciada!
@haskell noob Tenga en cuenta que la comparación de los primeros argumentos (las a) en realidad es lo primero, porque esa comparación tiene prioridad sobre las b. Probablemente describiría esto como "clasificando primero por el primer argumento", pero por supuesto está claro lo que quieres decir, ya que has dado un ejemplo. – MatrixFrog
Gracias 3lectrologos! Trabajado como un encanto. @MatrixFrog - Disculpa por el confuso inglés. ¡No es mi primer idioma de todos modos! – eclipseNoob
Esto es lo que "compara" por defecto de todos modos. comparar (1, "b") (2, "a") = LT. El póster original quería hacerlo al revés. –