如何在F#中使用IList<>?

5
我有一个类型为IList<Effort>的列表。模型Effort包含名为Amountfloat。我想以F#返回整个列表的Amount总和。如何实现呢?
4个回答

7
efforts |> Seq.sumBy (fun e -> e.Amount)

在提出问题后不久,我想起应该使用Seq而不是List,并得出了与您相同的结论。"member x.TotalEffort = x.Effort |> Seq.sumBy(fun i -> i.Amount)" - kim3er

5

我已经点赞了Seq.fold、管道化的Seq.fold和管道化的Seq.sumBy(我最喜欢第三个)。

话虽如此,没有人提到seq<'T>是F#中IEnumerable<T>的名称,因此Seq模块函数适用于任何IEnumerable,包括IList


4
Seq.fold (fun acc (effort: Effort) -> acc + effort.Amount) 0.0 efforts

4

一个有趣的细节是,您也可以避免使用类型注释。在sepp2k的代码中,您需要指定effort值具有类型Effort,因为编译器正在从左到右处理代码(如果不知道类型,则会在调用effort.Amount时失败)。您可以使用管道运算符来编写此代码:

efforts |> Seq.fold (fun acc effort -> acc + effort.Amount) 0.0  

现在编译器知道effort的类型,因为它知道正在处理类型为IList<Effort>的集合efforts。这是一个小改进,但我认为很不错。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接