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
Sorting 哈斯克尔分类法_Sorting_Haskell_Tuples - Fatal编程技术网

Sorting 哈斯克尔分类法

Sorting 哈斯克尔分类法,sorting,haskell,tuples,Sorting,Haskell,Tuples,如何以最简单的方式编写(或者haskell中嵌入了某种东西)函数,该函数以元组(String,Int)和Int x的参数列表为参数,并根据x值返回顶部的x元组作为列表 我想知道是否有可能写一个函数,它也接受3个参数,这是元组中文件的名称(或索引),根据它必须进行排序 让它变得非常通用的最佳解决方案是什么 take x $ sortBy (compare `on` fst) [("asd", 1), ...] take x从已排序列表中提取前x个项目sortBy使用作为第一个参数提供的排序函数对

如何以最简单的方式编写(或者haskell中嵌入了某种东西)函数,该函数以元组(String,Int)和Int x的参数列表为参数,并根据x值返回顶部的x元组作为列表

我想知道是否有可能写一个函数,它也接受3个参数,这是元组中文件的名称(或索引),根据它必须进行排序

让它变得非常通用的最佳解决方案是什么

take x $ sortBy (compare `on` fst) [("asd", 1), ...]
take x
从已排序列表中提取前x个项目
sortBy
使用作为第一个参数提供的排序函数对作为第二个参数提供的列表进行排序
(compare`on`fst)
比较每个元组的第一个值。 请注意,此示例比较每个元组的第一个值以进行排序。要按第二个值排序,请将
fst
替换为
snd

您可以看到,
sortBy
函数非常通用,因为它允许您定义用于比较值的函数。该函数有两个参数,应该返回LT、EQ或GT中的一个。请注意,函数
compare
需要从
Ord
派生两个参数。可以在模块
Data.function
中找到上的助手功能
。功能
sortBy
位于模块
Data.List

编辑: 下面是一个完整的工作示例,它通过比较元组的第一个值对元组列表进行排序,并打印结果列表的前2个元组。请注意,我用一个等效函数替换了上例中的
on
,该函数显示了
on
在内部的功能

import Data.Function
import Data.List

main = print $ mySort [("foo", 1), ("bar", 2), ("baz", 3), ("quux", 4)] 2

mySort list x = take x $ sortBy (\ x y -> compare (fst x) (fst y)) list
编辑:
正如Tom Lokhorst在其评论中指出的,来自模块
Data.Ord
的函数
comparing
是比较
上的
的更可读的替代/快捷方式,因此上述内容也可以写成
排序(比较fst)

注意,
数据.Ord的
比较
功能与比较时的
功能相同。所以你也可以写
sortBy(比较fst)列表
。很好,我不知道那一个。你不应该在
sortBy
之前
拿下
吗?mySort可能会占用无限的列表。由于
base-4.8.0.0
数据。list
提供
sortOn
(在本例中:
sortOn fst
)@AndreArtus如果你拿第一个,你只得到第一个x,而不是根据排序得到的前x。对无限列表进行排序实际上毫无意义!我知道你的问题可能更多是出于你自己的好奇心,但你对这些数据做了什么?排序后的列表真的是你想要的结果吗?我们不再在C country中的低级数组中来回移动元素,haskell让您可以轻松访问整个有趣的数据类型动物园,这些数据类型可能更适合于处理“排序”数据。原因是我正在学习并想知道有什么可能,排序函数是每个人都能理解的函数,因此解释起来更容易。当然我知道嵌入式类型,还在学习,谢谢