【问题标题】:Given a string containing numbers, What is the best way to extract these?给定一个包含数字的字符串,提取这些数字的最佳方法是什么?
【发布时间】:2013-12-21 11:19:26
【问题描述】:

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

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

如何将其转换为 Ints 列表;

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

我的直觉是使用地图和匿名函数?

【问题讨论】:

  • 您当前的转换代码是什么样的?
  • 您是否还想在最后一个元素中添加三个或者是错字?

标签: list haskell types


【解决方案1】:
func theList = (map read . concat . map words) theList

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

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

【讨论】:

    【解决方案2】:

    Haskell 有一些有用的功能

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

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

    正如 Gabriel 指出的那样,您还需要 concatMapwords 以确保您的字符串中只有 1 个数字。 words 会将字符串拆分为一串单词,concatMap 将在每个元素上运行它并将结果重新组合在一起。

    要知道如果你不小心, read 会在你的脸上炸开,因为如果字符串格式错误,它会调用error 这将终止你的程序。如果这是一个问题,可以遵循类似的过程

     mapMaybe :: (a -> Maybe b) -> [a] -> [b]
     readMaybe  :: String -> Maybe Int -- Restricted for clarity
    

    分别来自Data.MaybeText.Read

    【讨论】:

    • 别忘了words 函数。他也需要这个,因为他的一些字符串包含多个数字。
    猜你喜欢
    • 2021-11-16
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    • 2012-02-25
    相关资源
    最近更新 更多