【问题标题】:String list to Int List parsing字符串列表到 Int 列表解析
【发布时间】:2013-12-29 15:11:29
【问题描述】:

我有一个看起来像这样的字符串列表

String list = ["150";"350";"100"]

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

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

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

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

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

【问题讨论】:

    标签: list parsing f#


    【解决方案1】:

    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]
    

    【讨论】:

      【解决方案2】:

      您正在寻找的是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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-17
        • 2011-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多