Сортировка кортежей в списках haskell
Я хотел бы отсортировать список кортежей по третьему или четвертому элементу (скажем, c или d) в списке типа:
myList = [(a,b,c,d,e)]
Я знаю, является ли тип кортежа (a,b)
Я могу использовать следующий подход:
mySort xmyList = sortBy (compare `on` snd) x
Но тип sortBy не будет работать с кортежами, длина которых больше двух (поэтому, очевидно, нет смысла писать функцию доступа для thd
или же fth
):
(a -> a -> Ordering) -> [a] -> [a]
1 ответ
Решение
Но тип sortBy не будет работать с кортежами длиной более двух
Нет, это действительно работает для любого списка. Например, если вы хотите отсортировать c
, просто делать:
mySort xmyList = sortBy (compare `on` (\(a,b,c,d,e) -> c)) x
или же
mySort xmyList = sortBy (comparing thirdOf5) x
where thirdOf5 (_,_,c,_,_) = c