Quiero ordenar una lista de tuplas por sus segundos elementos.Ordenar una lista de tuplas por sus segundos elementos
Ejemplo de entrada:
[("Bob",3),("Terry",1)]
Ejemplo de salida:
[("Terry",1)("Bob",3)]
Quiero ordenar una lista de tuplas por sus segundos elementos.Ordenar una lista de tuplas por sus segundos elementos
Ejemplo de entrada:
[("Bob",3),("Terry",1)]
Ejemplo de salida:
[("Terry",1)("Bob",3)]
Puede utilizar sortBy
y comparing
:
sortBy :: (a -> a -> Ordering) -> [a] -> [a]
comparing :: (Ord b) => (a -> b) -> a -> a -> Ordering
En este caso, queremos comparar por el segundo elemento . Puede usar comparing snd
para obtener una función que pueda comparar dos tuplas por su segundo elemento.
Si quisiera definir mi propia función de clasificación para llamar desde cualquier lugar, ¿cómo puedo hacer esto exactamente? Puede que necesite usar esto más de una vez – user1214840
En otras palabras, quería definir mi propia función de clasificación que toma un lits de tuplas, la ordena en función de su segundo elemento y luego devuelve la misma lista ordenada de tuplas. – user1214840
@ user1214840 Igual que cualquier otra definición: 'myFancySort = {- implementación usando las sugerencias de ehird aquí -}' –
Otro buen truco es utilizar on
de Data.Function:
import Data.Function (on)
import Data.List (sortBy)
sortBy (compare `on` snd) [...]
No
muy diferente de comparing
pero un buen truco de vez en cuando.
'on' tiene algunos trucos agradables. De vez en cuando encuentro 'equating = on (==)' para ser útil. ('comparando = en comparación') –
Considérese un "regular" ordenar
sort xs = ... a < b ...
Estas clases deben hacer uso de compare
, o sus amigos como <
. Entonces, si ya ha implementado algo así, en lugar de simplemente compare a b
o a < b
, puede hacer compare (snd a) (snd b)
o snd a < snd b
.
sort xs = ... snd a < snd b ...
Por supuesto, si usted consigue inteligente, podrás abstracta a cabo el "descriptor de acceso", y que sea una entrada adicional a la función de clasificación:
sortComparingOn f xs = ... f a < f b ...
incluso se podría abstraer comparador conjunto :
sortBy cmp xs = ... a `cmp` b ...
sortBy
se proporciona en Data.List, como ehird mencionado.
¿Es esta una pregunta de tarea? Si es así, debes agregar la etiqueta 'homework'. –