【发布时间】:2021-05-19 14:55:23
【问题描述】:
这不是一个难题,但是我不写5行或更多行就找不到解决方案。
我想要以下函数的定义:
-- takes a list and give back the 2 biggest elements
getTwoBiggest :: [Int] -> (Int, Int)
编辑
我可以通过排序并获取前 2 个元素来做到这一点,但我没有找到按降序对列表进行排序的明确文档。
我该怎么做?
和Down这个类型有什么联系?
【问题讨论】:
-
Haskell 的排序是惰性的,所以如果 k 是固定的,你会得到 O(n)中的前 k 个元素>.
-
@WillemVanOnsem 你确定它不依赖于排序吗?无论如何,我怎样才能按降序对我的列表进行排序?
-
您可以使用
map (\(Down a) -> a) . sort . map Down。如果您在启用优化的情况下进行编译,这将产生与使用sortBy获得的完全相同的二进制代码。 -
getDown :: Down a -> a已定义。