如何在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
相关产品推荐
相关产品推荐

