Haskell如何查找返回字符串列表中包含指定字符的首个原字符串
问题原因
你当前的实现存在3个问题:
- 返回类型定义错误:你需要返回原字符串,所以返回值类型应该是
Maybe String而非Maybe Char - 逻辑层面对字符串做了拆分过滤:把所有字符串拆为单个字符拼接后查找,自然无法保留原始字符串
- 模式匹配逻辑问题:
(x:xs)的写法直接丢弃了列表的第一个元素,搭配reverse相当于从列表末尾倒序查找匹配项
实现方案
首先导入Data.List的find工具函数,直接基于原字符串做包含判断即可,全程不会修改原字符串内容:
import Data.List (find) -- 从列表头部开始查找第一个包含目标字符的元素 test :: Char -> [String] -> Maybe String test c = find (c `elem`)
针对你的测试用例执行:test '*' [" | "," # "," * "," | "," # "]
返回结果为 Just " * ",完全符合需求。
如果你需要保留原有代码倒序查找的逻辑(从列表尾部开始找第一个匹配项),只需要加reverse即可:
import Data.List (find) -- 从列表尾部开始倒序查找第一个包含目标字符的元素 test :: Char -> [String] -> Maybe String test c = find (c `elem`) . reverse
内容的提问来源于stack exchange,提问作者Mampenda
相关产品推荐
相关产品推荐

