字符串列表到Int列表解析

时间:2013-12-29 15:11:30

标签: list parsing f#

我有一个类似于

的字符串列表
String list = ["150";"350";"100"]

我现在正在尝试将其解析为一个int列表,以便我可以获取值并使用它们进行计算。我现在遇到的问题对于f#来说还是很新的,不知道如何做到这一点。 我正在考虑制作一个折叠函数,它对列表中的每个值运行System.Int32.Parse

let listParser list = List.fold (fun listParser a -> (System.Int32.Parse a) :: intlist) list

这个函数给我字符串列表 - > Int列表,但是当我运行此函数时,我得到了

stdin(105,12): error FS0001: This expression was expected to have type
int list    
but here has type
string -> string list 

更好的方法吗?感谢任何形式的帮助!

2 个答案:

答案 0 :(得分:3)

您正在寻找的是List.map功能:

let list = ["150";"350";"100"] 
let listOfInts = List.map System.Int32.Parse list

使用lambda,第二行是

let listOfInts = List.map (fun a -> System.Int32.Parse a) list

但在这种情况下你不需要lambda。

在F#中使用集合时,使用管道转发操作符是一种常见做法,如下所示:

let listOfInts = list |> List.map System.Int32.Parse

答案 1 :(得分:3)

List.fold似乎不符合您的要求,因为它是一种将函数应用于每个列表元素并将结果累积为单个值的方法,例如平均值。

您可以使用List.map;

> let list = ["150";"350";"100"];;
> let listParser list = List.map System.Int32.Parse list;;
val listParser : list:string list -> int list

> listParser list;;
val it : int list = [150; 350; 100]