我如何分拣[[2,3,1], [0,0], [1,0,4,3]]
以便我得到[[0,0], [1,2,3], [0,1,3,4]]
?如何根据它们的总和和内部元素对列表进行排序?
我想
- 排序每个子列表,然后
- 排序总榜单由他们的项目的总和
我有一些Python的经验,也有像内建函数sort(list, key=sum)
。但是,我不知道如何在Haskell中做同样的事情。有人能帮我离开这里吗?
我如何分拣[[2,3,1], [0,0], [1,0,4,3]]
以便我得到[[0,0], [1,2,3], [0,1,3,4]]
?如何根据它们的总和和内部元素对列表进行排序?
我想
我有一些Python的经验,也有像内建函数sort(list, key=sum)
。但是,我不知道如何在Haskell中做同样的事情。有人能帮我离开这里吗?
map sort
。你得到排序列表列表由子lsit的总和sortOn sum
sortOn
是sort(list, key=sum)
在Haskell对方:
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。
如果你想所有内部列表进行排序,那么你可以只申请sort
功能,每个内部列表,这仅仅是map sort
在哈斯克尔。
如果您想要通过某个比较器对所有列表进行排序,则可以使用非常容易理解的功能sortBy
。但sortBy
函数示例来自wentao答案效率不高,因为它会每次计算每个子列表的总和。相反,最好使用sortOn
函数,它使用记忆结果。它甚至更短。所以,正确的办法是下一个:
import Data.List (sortOn)
sumSort :: (Ord a, Num a) => [[a]] -> [[a]]
sumSort = sortOn sum . map sort
不知道,如果你想Python或哈斯克尔 – Adirio
@Adirio我希望它哈斯克尔 – CreZce