You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 17:05:51