给定一个包含数字的字符串,提取这些字符串的最佳方法是什么?

时间:2013-12-04 19:39:59

标签: list haskell types

我有一个字符串列表如下;

[“75”,“95 64”,“17 47 82”]

如何将其转换为Ints列表;

[75,95,64,17,47,82]

我的直觉是使用地图和匿名功能?

2 个答案:

答案 0 :(得分:4)

Haskell有一些有用的功能

read :: String -> Int -- Restricted for clarity
map  :: (a -> b) -> [a] -> [b]
words :: String -> [String]
concatMap :: (a -> [b]) -> [a] -> [b]

所以你给map一个函数和一个列表,它会将你的函数应用于列表的每个元素。现在知道这一点,你应该能够自己解决它。

正如加布里埃尔指出的那样,你还需要concatMapwords来确保你的字符串中只有1个数字。 words会将字符串拆分为一串字词,concatMap会在每个元素上运行它并将结果重新粉碎。

如果您不小心,请知道读取会在您的脸上爆炸,因为如果字符串格式不正确,它将调用error,这将终止您的程序。如果这是一个问题,可以使用

执行类似的过程
 mapMaybe :: (a -> Maybe b) -> [a] -> [b]
 readMaybe  :: String -> Maybe Int -- Restricted for clarity

分别来自Data.MaybeText.Read

答案 1 :(得分:1)

func theList = (map read . concat . map words) theList

除非可以推断,否则您需要在使用时指定类型

(func ["75","95 64","17 47 82"])::[Int]