gpt4 book ai didi

list - 对列表应用自定义排序(对列表列表进行排序)

转载 作者:行者123 更新时间:2023-12-05 00:35:17 25 4
gpt4 key购买 nike

在此页面上有一个如何使用自定义排序对列表进行排序的示例:
http://zvon.org/other/haskell/Outputlist/sortBy_f.html

xxx a b  | odd a = LT
| otherwise = GT

Input: sortBy xxx [1,2,3,4,5,6,7]

Output: [1,3,5,7,6,4,2]

标准小于顺序让我比较列表,例如
[1,2,3] < [0,4,5]

是假的。但这不适用于上面的示例函数:
Main> xxx [1,2,6] [1,7,3]
ERROR - Cannot infer instance
*** Instance : Integral [a]
*** Expression : xxx [1,2,6] [1,7,3]

有没有一种简单的方法可以将这样的顺序扩展到列表?

我想要此功能的原因是使用 sortBy 使用我的自定义排序对列表列表进行排序。

我将不胜感激例如解决方案代码,有关阅读内容的建议或介于两者之间的任何内容。我希望有一些内置的方法可以用语言来做到这一点,而不是编写一个直接比较列表的函数。

最佳答案

您可以使用以下代码将比较函数转换为列表的比较函数:

import Data.Monoid (mconcat)
compareList :: (a -> b -> Ordering) -> [a] -> [b] -> Ordering
compareList _ [] [] = EQ
compareList _ (_:_) [] = GT
compareList _ [] (_:_) = LT
compareList comparer (x:xs) (y:ys) =
comparer x y `mappend` compareList comparer xs ys

现在您可以使用 xxx在两个列表中:
> compareList xxx [1,2,6] [1,7,3]
LT
> compareList xxx [2,2,6] [1,7,3]
GT

然后,您可以使用比较器对嵌套列表进行排序:
> sortBy (compareList xxx) [[2,2,6], [1,7,3], [1,1,1]]
[[1,7,3],[1,1,1],[2,2,6]]

关于list - 对列表应用自定义排序(对列表列表进行排序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9612883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com