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)]