Скажите, есть ли список списков, например [[1,3,4],[1,5,6,7],[2,8,0]]
или ["QQQ", "RRRR", "TTTTT"]
, есть ли функция, которая будет упорядочивать их по количеству элементов во внутренних списках, то есть в списке Int
, список из 4 элементов идет спереди и в списке String
s, T
s идет вперед, а затем R
s?Заказ списка списков в Haskell
2
A
ответ
3
Использование sortBy с пользовательским предикатом:
Prelude> import Data.List
Prelude Data.List> let l = [[1,3,4],[1,5,6,7],[2,8,0]]
Prelude Data.List> sortBy (\e1 e2 -> compare (length e2) (length e1)) l
[[1,5,6,7],[1,3,4],[2,8,0]]
Редактировать: Спасибо @JJJ за более красивый вариант
Prelude Data.List> import Data.Ord
Prelude Data.List Data.Ord> sortBy (flip $ comparing length) l
[[1,5,6,7],[1,3,4],[2,8,0]]
1
sortBy
из Data.List и comparing
от Data.Ord поможет вы.
foo = sortBy (comparing (negate . length))
bar = foo ["QQQ", "RRRR", "TTTTT"]
0
Я хочу добавить еще одно решение, которое запоминает длины заданных списков. В противном случае длины пересчитываются с каждым сравнением, что будет означать много накладных расходов для больших списков.
import Control.Arrow ((&&&))
import Data.List (sort, sortBy)
import Data.Ord (comparing)
sortByLen :: [[a]] -> [[a]]
sortByLen = map snd . sortBy (comparing fst) . map ((negate . length) &&& id)
Если вы хотите, чтобы списки одинаковой длины упорядочиваются лексикографически, вы можете использовать несколько проще
sortByLen' :: (Ord a) => [[a]] -> [[a]]
sortByLen' = map snd . sort . map ((negate . length) &&& id)
Смежные вопросы
- 1. Построение списка списков внутри списков в Haskell
- 2. Создание списка списков в Haskell
- 3. «Расширение» списка списков в Haskell
- 4. Фильтрация списка списков в Haskell
- 5. Разбор элементов из списка списков в Haskell
- 6. Заказ списка списков по спискам len
- 7. Конкатенация списков в Haskell
- 8. Понимание списков в Haskell
- 9. сортировка списков списков в haskell
- 10. Haskell, вытягивая оба списка из кортежа списков
- 11. заказ Сортировка в Haskell
- 12. Haskell от списка пар до пары списков
- 13. Как распечатать значения всех списков в Haskell
- 14. Haskell - получить n количество списков из списка списков
- 15. Пересечение списков кортежей - Haskell
- 16. Объединение двух списков в Haskell
- 17. Сравнение двух списков в Haskell
- 18. Haskell список списков умножение
- 19. Haskell Объединение нескольких списков
- 20. Оптимизация основных списков в Haskell
- 21. Определение списков в Haskell
- 22. Генерация списков в Haskell
- 23. Список списков Haskell
- 24. Сглаживание списка в Haskell
- 25. Добавление списков в список списков в Haskell?
- 26. Составление списка: составление списков списков
- 27. Расширение списка в Haskell
- 28. Оформить заказ на заказ смены списков списков заказов
- 29. Haskell - уплощение Объекты списков
- 30. Haskell функция начинающий заказ
так, [SortBy] (http://www.haskell.org/ghc/ Docs/7,6-последняя/HTML/библиотеки/база-4.6.0.1/Data-list.html # v: SortBy)? –