如何"[int, int..]"形式的字符串并将其转换为 int 列表?



我有一个字符串,看起来像

"[1, 45, 3, 4, 54, 299]"

虽然长度是任意的。会有不止一个列表,这只是一个例子。我想把它转换成一个整数列表,比如

[1, 45, 3, 4, 54, 299]

我试过了

strToInt :: String -> [Int]
strToInt xs = map digitToInt $ filter (`elem` ["0"..]) xs

但是它不工作。

error:
Variable not in scope: digitToInt :: [Char] -> Int
|
| gh5 xs = map digitToInt $ filter (`elem` ["0"..]) xs

谢谢。

如果要使用digitToInt,必须导入Data.Char。你可以在谷歌上自己发现这类事情。(解决这个问题可以让你解决下一个问题——还有一些问题需要解决。)

Haskell已经有一个函数可以做你想做的事情。它叫做read:

read :: Read a => String -> a

结果是[Int]有一个Read实例,所以你可以将strToInt定义为:

strToInt :: String -> [Int]
strToInt = read

然而,在此情况下,如果您给出一个不符合预期格式的无效字符串,它将抛出以下错误:

> strToInt "incorrect"
*** Exception: Prelude.read: no parse

如果你想要更健壮的处理,你可以看看Text.Read.readMaybePrelude.reads,正如Daniel Wagner在评论中指出的。

最新更新