我有一个 (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/