列表中所有项目的特定属性的总和

Tim*_*hyP 3 f#

以下面的例子为例,

我上课了

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#的搜索引擎支持很糟糕)

Tim*_*son 8

假设您有一个类型的值IEnumerable<Item>,您可以sum_bySeq模块中使用:

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#之间的方法相同.