繁体   English   中英

如何将String转换为Haskell中的整数列表

[英]How do i convert String into list of integers in Haskell

我有一个像"1 2 3 4 5"String 如何将它转换为Haskell中的[1,2,3,4,5]整数列表? 如果列表是"12345"怎么办?

您可以使用

Prelude> map read $ words "1 2 3 4 5" :: [Int]
[1,2,3,4,5]

这里我们使用words在空格上分割"1 2 3 4 5" ,这样我们得到["1", "2", "3", "4", "5"] read函数现在可以将各个字符串转换为整数。 它具有类型Read a => String -> a因此它实际上可以转换为Read类型中的任何内容,并且包括Int 这是因为返回类型中的类型变量需要指定上面的类型。

对于没有空格的字符串,我们需要将每个Char转换为单个元素列表。 这可以通过对它应用(:"")来完成 - String只是Char的列表。 然后我们像以前一样再次申请read

Prelude> map (read . (:"")) "12345" :: [Int]
[1,2,3,4,5]
q1 :: Integral a => String -> [a]
q1 = map read . words

q2 :: Integral a => String -> [a]
q2 = map (read . return)

错误处理留作练习。 (提示:您需要一个不同的返回类型。)

Data.Char模块中定义了一个名为digitToInt的函数 它需要一个字符并返回一个数字,只要该字符可以解释为十六进制数字。

如果要在第一个示例中使用此函数,其中数字以空格分隔,则需要避免使用空格。 你可以用一个简单的过滤器做到这一点

> map digitToInt $ filter (/=' ') "1 2 1 2 1 2 1"
[1,2,1,2,1,2,1]

第二个例子,其中未完全分开的数字更加容易,因为您不需要过滤器

> map digitToInt "1212121"
[1,2,1,2,1,2,1]

我猜javaToInt读取更好,因为它不依赖于表达式的类型,这可能很棘手(这反过来我发现这个帖子= P)。 无论如何,我是haskell的新手,所以我可能也错了=)。

您可以使用:

> [read [x] :: Int | x <- string]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM