Haskell自定义lookup函数实现:查找包含指定Int的子列表
解决方案
内置的lookup函数仅适用于元组列表([(a,b)]),用于根据键查找对应值,和你的需求场景不匹配。以下是针对需求的几种实现方式:
1. 返回第一个包含目标Int的子列表(安全版本)
这个版本用Maybe类型处理无匹配的情况,避免运行时错误,更符合Haskell的安全设计风格:
import Data.Maybe (listToMaybe) findSublistContaining :: Int -> [[Int]] -> Maybe [Int] findSublistContaining target = listToMaybe . filter (elem target)
逻辑说明:
elem target用于判断单个子列表是否包含目标Int;filter (elem target)遍历输入的列表列表,筛选出所有包含目标Int的子列表;listToMaybe取筛选结果的第一个元素(如果存在),返回Just 子列表,无匹配时返回Nothing。
示例调用:
findSublistContaining 3 [[1,2,6],[3,2,7],[5,7,8]] -- 返回 Just [3,2,7] findSublistContaining 9 [[1,2,6],[3,2,7],[5,7,8]] -- 返回 Nothing
2. 返回第一个包含目标Int的子列表(简易版本)
如果你能确保输入中一定存在匹配的子列表,可以直接取筛选结果的第一个元素,但无匹配时会触发运行时错误:
findSublistContaining :: Int -> [[Int]] -> [Int] findSublistContaining target = head . filter (elem target)
示例调用:
findSublistContaining 3 [[1,2,6],[3,2,7],[5,7,8]] -- 返回 [3,2,7]
3. 返回所有包含目标Int的子列表
如果需要返回所有符合条件的子列表,直接返回筛选结果即可:
findAllSublistsContaining :: Int -> [[Int]] -> [[Int]] findAllSublistsContaining target = filter (elem target)
示例调用:
findAllSublistsContaining 2 [[1,2,6],[3,2,7],[5,7,8]] -- 返回 [[1,2,6],[3,2,7]]
内容的提问来源于stack exchange,提问作者John Fisher
相关产品推荐
相关产品推荐

