有一个字符串列表["f", "1", "h", "6", "b", "7"]。
我如何计算这个列表中的 Int?
现在我有了这个算法,但它不是很好。
import Data.Char
let listOfStrings = ["f", "1", "h", "6", "b", "7"]
let convertedString = "f1h6b7"
let listOfInt = map (\x -> read [x]::Int) (filter (\x -> isDigit x) convertedString)
length listOfInt
Prelude> 3
此外,我无法将 listOfStrings 转换为一个字符串。这个算法甚至不能正常工作
你能帮我优化一下吗?
最佳答案
1) 使用reads::Reads Int
(这个表达式只是reads::String -> [(Int, String)]
的伪装)来测试一个字符串是整数值的表示:
isNumber :: String -> Bool
isNumber s = case (reads s) :: [(Int, String)] of
[(_, "")] -> True
_ -> False
为什么 reads
?因为它返回有关解析过程的附加信息,我们可以从中得出解析是否成功的结论。 read::Int
只会抛出异常。
2) 然后用它过滤一个字符串列表并获取它的长度:
intsCount :: [String] -> Int
intsCount = length . filter isNumber
关于string - 如何计算字符串列表中的整数。 haskell ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13673169/