list - 按元组的第二个元素对元组列表进行排序,无需高阶函数或递归

标签 list sorting haskell minimum

我有一个 (String, Int) 对的列表,正在努力弄清楚如何按 snd 字段 ( Int ) 对列表进行排序。我不允许使用高阶函数或递归,这使得它变得更加困难。

比如我有

[("aaaaa", 5),("bghdfe", 6),("dddr",4)] 

并想将其排序

 [("dddr",4),("aaaaa", 5),("bghdfe", 6)].

编辑: 我知道如果没有高阶函数,排序可能是不可能的,我真正需要的是找到最小长度的元素(snd字段),那么有没有办法找到最小数字,然后取fst字段该索引处的列表元素?如果这种方法效果更好,我不确定如何找到该最小数字的索引。

最佳答案

这个任务似乎是不可能的,因为在 Haskell 中你无法编写没有递归的排序。这意味着,您必须使用 sort,通常类似于 sortBy Compare,这样您就拥有了它。

但是,如果允许使用sort,您可以首先反转所有元组,对结果列表进行排序,然后再次反转结果中的元组。这应该可以在一些嵌套列表理解中完成,因此从技术上讲不需要更高阶的函数。


在您提供更多详细信息后,我会这样做

homework list = snd (minimum [ (s,f) | (f,s) <- list ])

关于list - 按元组的第二个元素对元组列表进行排序,无需高阶函数或递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65107904/

相关文章:

Python 3 append 到字典的列表值

python - 如何迭代并打印列表中的每个元素(Python)

java - 如何重新排序以下列表数据

haskell - 堆栈 : Error in $. 标志。_: key "manual"不存在

python - 迭代二维列表并从Python中的坐标中选择范围

python - 将新项目 append 到列表中的列表

c# - 你能提供数组排序的替代算法吗?

java - 使用快速排序按列对二维数组进行排序

haskell - 为什么类型为 [tail, init, reverse], [[a] -> [a]]?

haskell - 在纯代码中避免 IORef