如果我有像[("candy",3), ("icecream",2), ("meat",6)]
这样的元组列表。如何获得具有最高编号的元组?
否则,收集所有数字的递归函数会有所帮助吗?如果是这样,我该怎么办?
答案 0 :(得分:5)
将Data.List.maximumBy
与Data.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子句可以更改,因为我说这是第一次尝试。 请修改问题的标题,它与问题本身不符。