Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用代理顺序对无序列表进行Haskell排序_Haskell_Sorting - Fatal编程技术网

使用代理顺序对无序列表进行Haskell排序

使用代理顺序对无序列表进行Haskell排序,haskell,sorting,Haskell,Sorting,假设我有x::[(n,a)]其中n是一个数字,a是一个无序项(不属于Ord类) 我想把这个列表按n排序 我无法执行排序x,因为a不可排序。我可以用索引替换a,然后使用组合新列表但这似乎是一个糟糕的解决方案 替代品?啊。没关系按所需排序 sortBy (compare `on` fst) 或者类似的东西。 您将在模块数据.Function中定义的,以及数据.List中定义的中找到需要导入的。此外,如果您有一个备用函数(例如,称之为f)来形成订单,您可以使用订单的数据。订单的Monoid属性: s

假设我有
x::[(n,a)]
其中n是一个数字,a是一个无序项(不属于Ord类)

我想把这个列表按n排序

我无法执行
排序x
,因为
a
不可排序。我可以用索引替换
a
,然后使用
组合新列表但这似乎是一个糟糕的解决方案


替代品?

啊。没关系<代码>按所需排序

sortBy (compare `on` fst)
或者类似的东西。
您将在模块
数据.Function
中定义的
,以及
数据.List
中定义的
中找到需要导入的

此外,如果您有一个备用函数(例如,称之为
f
)来形成订单,您可以使用订单的数据。订单的Monoid属性:

sortBy (comparing fst `mappend` comparing (f . snd))

这将在该对的第二个组件上使用您的函数。如果您不需要或没有第二个标准来对成对进行排序,那么
sortBy(比较fst)
就可以了(结果列表将只包含具有相同列表顺序的第一个组件的成对)。

不仅仅是
sortBy
,而是
sortBy(比较fst)
(以防您从未听说过
比较
功能)。
比较
位于
Data.Ord
中(但您知道这一点,因为您使用了hoogle。)?酷,每次我需要知道函数的位置时,我总是问尼尔·米切尔……作为跟进,更传统的用法是利用定义:comparing=on compare不反驳技术高超的拉姆齐博士,只是指出一种更常见的风格。@BMpeh不要给我比我更多的信任rth.我从别人那里学到了关于比较的
,我很高兴从你那里学到了比较的
。(保持答案不变,以免读者陷入绝望的困惑。)