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

F# 在F中将字符串列表转换为浮点/整数#,f#,c#-to-f#,F#,C# To F#,是否有一种快速简单的方法将整个字符串列表转换为浮点或整数 把它们加在一起,类似于F# foreach(列表中的字符串s) { 总和+=整数解析; } 类似的内容也应该具有相同的效果: let sum = list |> Seq.map System.Int32.Parse |> Seq.sum F#似乎不支持引用int上的方法,因此我不得不使用System.Int32 在F#中,seq类型是.NETIEnumerable的别名,因此该代码适用于数组、列表等 请注意,在“无点”样式中

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

foreach(列表中的字符串s)
{
总和+=整数解析;
}

类似的内容也应该具有相同的效果:

let sum = list |> Seq.map System.Int32.Parse |> Seq.sum
F#似乎不支持引用
int
上的方法,因此我不得不使用
System.Int32

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

请注意,在“无点”样式中使用了
Parse
——一个没有参数的函数可以直接用作另一个需要该类型的函数的参数。在这种情况下,
Seq.map
具有以下类型:

('a -> 'b) -> seq<'a> -> seq<'b>
('a->'b)->seq

由于
System.Int32.Parse
具有类型
string->int
Seq.map System.Int32.Parse
具有类型
Seq->Seq
,如果您希望将字符数减到最少,那么您可以将Ganesh发布的解决方案简化为以下内容:

let sum = list |> Seq.sumBy int

这与此基本相同,
int
函数是一种通用转换,可以将任何内容转换为整数(它也适用于字符串)。
sumBy
函数是
map
sum
的组合,它首先将所有元素投影为一个数值,然后对结果求和。

从技术上讲,至少有三种不同的方法:

1) 其他答案中描述的Seq.sum或sumBy方法是获得F#中的和的标准方法:

2) 出于教学目的,我们可能会感兴趣地看到,在F#中模拟C#行为的距离有多近;例如,使用引用单元格类型:

let inline (+=) x y = x := !x + y
let sum = ref 0
for s in list do sum += int s
3) 与2)相同,但使用byref指针类型:

let inline (+=) (x:_ byref) y = x <- x + y
let mutable sum = 0
for s in list do &sum += int s

let inline(+=)(x:uByRef)y=x除了下面的答案之外,您还可以使用LINQ:
var sum=list.Select(int.Parse).sum()使其在C中看起来非常相似
let inline (+=) (x:_ byref) y = x <- x + y
let mutable sum = 0
for s in list do &sum += int s