在F#中将字符串列表转换为浮点数/整数

Jac*_*cco 7 f# c#-to-f#

是否有一种快速简单的方法将整个字符串列表转换为浮点数或整数,并将它们添加到F#中类似于此?

foreach(string s in list)
{
    sum += int.Parse(s);
}
Run Code Online (Sandbox Code Playgroud)

GS *_*ica 14

这样的东西应该具有相同的效果:

let sum = list |> Seq.map System.Int32.Parse |> Seq.sum
Run Code Online (Sandbox Code Playgroud)

F#似乎不支持引用方法,int所以我不得不使用System.Int32.

在F#中,类型seq是.NET的别名IEnumerable,因此此代码适用于数组,列表等.

注意使用Parse"无点"样式 - 没有参数的函数可以直接用作期望该类型的另一个函数的参数.在这种情况下Seq.map有这种类型:

('a -> 'b) -> seq<'a> -> seq<'b>
Run Code Online (Sandbox Code Playgroud)

而且由于System.Int32.Parse有型string -> int,Seq.map System.Int32.Parse有型seq<string> -> seq<int>.


Tom*_*cek 14

如果你想瞄准最少数量的字符,那么你可以简化Ganesh发布的解决方案,如下所示:

let sum = list |> Seq.sumBy int
Run Code Online (Sandbox Code Playgroud)

这几乎完全相同 - int函数是一个通用转换,可以将任何东西转换为整数(并且它也适用于字符串).该sumBy函数是的组合mapsum该第一项目的所有元素为数字值,然后相加结果.