Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.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 - Fatal编程技术网

Haskell,仅按第一个字段对三人组进行排序

Haskell,仅按第一个字段对三人组进行排序,haskell,Haskell,我有一个(Int,Int,Int)元素列表 如何仅按第一个元素对该列表进行排序? 对于pairs,我可以处理,但是对于三个元素,如果您为大小为3的元组定义了一个类似于fst的函数,我会遇到一个问题: fst3::(a,b,c)->a fst3(a,,=a 然后您可以使用: 导入数据。列表 导入数据.Ord sortByFst3::Ord a=>[(a,b,c)]->[(a,b,c)] sortByFst3=sortBy(比较fst3) 如果您为大小为3的元组定义了类似于fst的函数: fst3

我有一个
(Int,Int,Int)
元素列表
如何仅按第一个元素对该列表进行排序?

对于pairs,我可以处理,但是对于三个元素,如果您为大小为3的元组定义了一个类似于fst的函数,我会遇到一个问题:

fst3::(a,b,c)->a
fst3(a,,=a
然后您可以使用:

导入数据。列表
导入数据.Ord
sortByFst3::Ord a=>[(a,b,c)]->[(a,b,c)]
sortByFst3=sortBy(比较fst3)

如果您为大小为3的元组定义了类似于fst的函数:

fst3::(a,b,c)->a
fst3(a,,=a
然后您可以使用:

导入数据。列表
导入数据.Ord
sortByFst3::Ord a=>[(a,b,c)]->[(a,b,c)]
sortByFst3=sortBy(比较fst3)
自4.8.0以来,存在Data.List

屈服

从4.8.0开始,有Data.List

屈服


如何使用pairs?如何使用pairs?旁注(可能只是沉思):定义像
fst3
fst4
snd3
等函数总是让我觉得不可伸缩。我建议只使用
sortBy(比较(\(a,\u,\u)->a))
。这就是说,a揭示了一堆包重新定义了这个函数。我不禁想知道哪一个更糟糕:前奏曲中有像
fst3
这样的东西,还是在不同的包中散布一堆等效函数?哦……当第一个元素相同时,
fst3
唯一能让您得到的是稳定的排序。三元组的默认排序已经先对
a
进行排序,然后在必要时对
b
进行排序,最后在必要时对
c
进行排序。@chepner还可以对第二个或第三个元素不支持Ord.Side注释的情况进行排序(可能只是沉思):定义类似
fst3
的函数,
fst4
snd3
,等等总是让我觉得不可伸缩。我建议只使用
sortBy(比较(\(a,\u,\u)->a))
。这就是说,a揭示了一堆包重新定义了这个函数。我不禁想知道哪一个更糟糕:前奏曲中有像
fst3
这样的东西,还是在不同的包中散布一堆等效函数?哦……当第一个元素相同时,
fst3
唯一能让您得到的是稳定的排序。三元组的默认排序已经先对
a
进行排序,然后在必要时对
b
进行排序,最后在必要时对
c
进行排序。@chepner还可以对第二个或第三个元素不支持Ord的情况进行排序。
import Data.List

lst = [(3,1,2), (2,1,3), (1,3,2)]

main = do
  let srt = sortOn (\(a,_,_) -> a) lst
  print $ srt
[(1,3,2),(2,1,3),(3,1,2)]