Haskell:如何在元组列表中输出数值最大的元组
从元组列表中找出数值最大的元组
针对你的需求,我们可以用Haskell标准库中的maximumBy函数(来自Data.List模块)实现,它允许自定义元素的比较规则。
完整代码示例
import Data.List (maximumBy) import Data.Ord (comparing) testData = [("Jack", "Hill", 2), ("Susan", "Smith", 5), ("Steve", "Johnson", 6)] -- 基于元组第三个元素找出最大元组 maxTuple :: [(String, String, Int)] -> (String, String, Int) maxTuple = maximumBy (comparing (\(_, _, num) -> num)) -- 测试调用 main = print $ maxTuple testData
代码说明
maximumBy:接收一个比较函数和列表,返回列表中符合比较规则的"最大"元素,需要从Data.List导入。comparing:是个便捷工具函数,它接收一个提取关键值的函数(比如这里提取元组第三个元素的\(_, _, num) -> num),返回可用于比较的函数,简化代码编写。- 不想用
comparing的话,也可以手动写比较逻辑,效果完全一致:maxTuple = maximumBy (\a b -> compare (third a) (third b)) where third (_, _, num) = num
运行代码后会输出期望结果:
("Steve", "Johnson", 6)
额外提示
如果你的列表可能为空,maximumBy会抛出异常,这种场景可以用Maybe类型做安全处理:
maxTupleSafe :: [(String, String, Int)] -> Maybe (String, String, Int) maxTupleSafe [] = Nothing maxTupleSafe xs = Just $ maximumBy (comparing (\(_, _, num) -> num)) xs
内容的提问来源于stack exchange,提问作者Power7934
相关产品推荐
相关产品推荐

