获得最高价值的元组?

时间:2019-12-05 19:03:50

标签: haskell

如果我有像[("candy",3), ("icecream",2), ("meat",6)]这样的元组列表。如何获得具有最高编号的元组?

否则,收集所有数字的递归函数会有所帮助吗?如果是这样,我该怎么办?

2 个答案:

答案 0 :(得分:5)

Data.List.maximumByData.Ord.comparing一起使用以创建比较函数,以代替元组的Ord实例。

>>> maximum [("zoo", 1), ("ant", 10)]
("zoo", 1)  -- Because ("zoo", 1) > ("ant", 10), because "zoo" > "ant"
>>> maximumBy (comparing snd) [("zoo", 1), ("ant", 10)]
("ant", 10)  -- Because 10 > 1

答案 1 :(得分:0)

第一次尝试:

maxTupleL :: [(a, Int)] -> (a, Int)
maxTupleL (t:[]) = t
maxTupleL (t:ts) = maxT t (maxTupleL ts)

maxT :: (a, Int) -> (a, Int) -> (a, Int)
maxT (v1, n) (v2, m) = if (n > m)
                       then (v1, n)
                       else (v2, m)

也许您应该尝试使用折叠,但是您需要处理空列表大小写(我不处理),if子句可以更改,因为我说这是第一次尝试。 请修改问题的标题,它与问题本身不符。