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

时间:2010-04-03 15:19:33

标签: f# sum ilist

我有一个IList<Effort>类型的列表。模型Effort包含一个名为float的{​​{1}}。我希望在F#中返回整个列表中Amount的总和。如何实现这一目标?

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:5)

支持Seq.fold,流水线Seq.fold和流水线Seq.sumBy的答案(我最喜欢第三个)。

尽管如此,没有人提到seq<'T>IEnumerable<T>的F#名称,因此Seq模块功能适用于任何IEnumerable,包括IList }第

答案 2 :(得分:4)

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

答案 3 :(得分:3)

可能有趣的一个细节是您也可以避免使用类型注释。在 sepp2k 的代码中,您需要指定effort值的类型为Effort,因为编译器正在处理从左到右的代码(它会如果它不知道类型,则在effort.Amount呼叫失败。您可以使用流水线操作符来编写它:

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

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