我有一个字符串列表如下;
[“75”,“95 64”,“17 47 82”]
如何将其转换为Ints列表;
[75,95,64,17,47,82]
我的直觉是使用地图和匿名功能?
答案 0 :(得分:4)
Haskell有一些有用的功能
read :: String -> Int -- Restricted for clarity
map :: (a -> b) -> [a] -> [b]
words :: String -> [String]
concatMap :: (a -> [b]) -> [a] -> [b]
所以你给map
一个函数和一个列表,它会将你的函数应用于列表的每个元素。现在知道这一点,你应该能够自己解决它。
正如加布里埃尔指出的那样,你还需要concatMap
和words
来确保你的字符串中只有1个数字。 words
会将字符串拆分为一串字词,concatMap
会在每个元素上运行它并将结果重新粉碎。
如果您不小心,请知道读取会在您的脸上爆炸,因为如果字符串格式不正确,它将调用error
,这将终止您的程序。如果这是一个问题,可以使用
mapMaybe :: (a -> Maybe b) -> [a] -> [b]
readMaybe :: String -> Maybe Int -- Restricted for clarity
分别来自Data.Maybe
和Text.Read
。
答案 1 :(得分:1)
func theList = (map read . concat . map words) theList
除非可以推断,否则您需要在使用时指定类型
(func ["75","95 64","17 47 82"])::[Int]