使用Haskell有效地将[Integer]转换为[Float]

时间:2012-11-10 18:15:38

标签: performance haskell type-conversion

以下是我正在阅读的文本文件中的条目的简化示例 -

Set1 1 2 3
Set2 6 7 8

我正在尝试编写一个可以将上述字符串转换为元组列表的函数 -

[("Set1", [1.0, 2.0, 3.0]), ("Set2", [6.0, 7.0, 8.0])]

这是我写的功能 -

parse_input :: String -> [(String, [Float])]
parse_input x = [ (head y, int2float (tail y)) | y <- splitinput ]
    where
        int2float x = [ read a::Float | a <- x ]
        splitinput = [ words a | a <- lines x ]

最令我困扰的是这个代码是int2float部分。它梳理整数列表,并逐个将每个整数转换为浮点数。

是否有更有效的方法将整数列表转换为浮点数列表?

1 个答案:

答案 0 :(得分:3)

我不清楚你对这种情况的“有效方法”是什么意思?

您要做的是将[String]转换为[Float]。我认为使用read会很好。如果您确实拥有[Int],则可以使用fromIntegral获取Num类型的任何实例。只是为了指出你应该更喜欢map而不是列表理解,因为它更具可读性。