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

如何在Haskell中将[String]转换为[[Int]]嵌套列表?

实现字符串列表到嵌套整数列表的转换

这是个很常见的Haskell列表转换需求,我们可以借助标准库的工具快速实现你要的stringToInt函数。

核心思路

要完成这个转换,我们需要分两步处理:

  • 第一步:把单个字符串里的每个数字字符转换成对应的整数
  • 第二步:把这个转换逻辑应用到整个字符串列表上

具体实现

首先,我们需要导入Data.Char模块里的digitToInt函数——它专门负责将'0'到'9'的字符转换成对应的Int值,非常贴合我们的需求。

import Data.Char (digitToInt)

stringToInt :: [String] -> [[Int]]
stringToInt = map (map digitToInt)

代码解释

  • 内层的map digitToInt:作用在单个字符串上,遍历字符串的每个字符,用digitToInt把字符转成整数。比如对"123"应用这个操作,会得到[1,2,3]。
  • 外层的map:遍历输入的整个字符串列表,把内层的转换逻辑应用到每个字符串上,最终就得到了嵌套的整数列表。

测试示例

用你给出的输入测试:

stringToInt ["123","346","789"]
-- 输出结果:[[1,2,3],[3,4,6],[7,8,9]]

(注:你例子里第二个输出写的是[4,5,6],应该是输入的笔误,实际输入"346"会得到[3,4,6])

替代方案(无需导入模块)

如果你不想额外导入模块,也可以用read函数配合字符转字符串的方式实现,不过这种写法不如digitToInt直观:

stringToInt :: [String] -> [[Int]]
stringToInt = map (map (\c -> read [c] :: Int))

注意事项

两种方法都只适用于纯数字组成的字符串,如果输入字符串包含非数字字符(比如'a'、'!'),都会触发运行时错误。如果需要处理这种异常情况,可以考虑用Maybe类型包装结果,比如结合readMaybe函数,但这超出了你当前的需求范围,就不多展开了。

内容的提问来源于stack exchange,提问作者Larry Jones

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:11:22