如何对[[2,3,1], [0,0], [1,0,4,3]]
进行排序,以便获得[[0,0], [1,2,3], [0,1,3,4]]
?
我想
我有一些Python经验,并且有内置函数,如sort(list, key=sum)
。但是,我不知道如何在Haskell中做同样的事情。有人可以帮助我离开这里吗?
答案 0 :(得分:3)
map sort
。您将获得已排序列表的列表sortOn sum
sortOn
是Haskell中sort(list, key=sum)
的对应部分:
sortOn :: Ord b => (a -> b) -> [a] -> [a]
排序:
import Data.List
doubleSort :: (Ord a, Num a) => [[a]] -> [[a]]
doubleSort = sortOn sum . map sort
或
doubleSort dlist = sortOn sum (map sort dlist)
谢谢,Zeta。
答案 1 :(得分:2)
如果要对所有内部列表进行排序,那么您只需将sort
函数应用于每个内部列表,该列表在 Haskell 中仅为map sort
。
如果您希望通过某个比较器对所有列表进行排序,则可以使用非常易理解的函数sortBy
。但是来自wentao回答的sortBy
函数示例效率不高,因为它每次都会计算每个子列表的总和。相反,最好使用sortOn
函数,该函数使用结果的记忆。它甚至更短。接下来是正确的解决方案:
import Data.List (sortOn)
sumSort :: (Ord a, Num a) => [[a]] -> [[a]]
sumSort = sortOn sum . map sort