以下面的例子为例,
我上课了
public class SomeItem
{
public string Name;
public DateTime Published;
public uint16 Size;
}
Run Code Online (Sandbox Code Playgroud)
我有一个List<SomeItem>
,我想计算所有项目的总大小.
在C#我只是写
var totalSize = items.Sum((i) => i.Size);
Run Code Online (Sandbox Code Playgroud)
我已经看了F#中的List函数,但是他们总是抱怨类型.
你会怎么用F#写这个?
(我尝试过搜索引擎,但对F#的搜索引擎支持很糟糕)
假设您有一个类型的值IEnumerable<Item>
,您可以sum_by
从Seq
模块中使用:
let totalSize = items |> Seq.sum_by (fun (i : Item) -> i.Size)
Run Code Online (Sandbox Code Playgroud)
请注意,F#的Microsoft.FSharp.Collections.List<T>
类型与您可能习惯的类型不同System.Collections.Generic.List<T>
,并且它们不是可交互的.但是,Seq
模块中的方法适用于任何方法IEnumerable<T>
,并且IEnumerable<T>
F#和C#之间的方法相同.