gpt4 book ai didi

F# 对 Seq<'T> 中的多个字段求和

转载 作者:行者123 更新时间:2023-12-04 18:21:30 25 4
gpt4 key购买 nike

我希望能够对序列的多个字段求和。如果不多次迭代序列,我不知道如何做到这一点。我的看法是,这是低效的。有没有一种聪明的方法来做到这一点,我没有看到?

type item = {
Name : string
DemandQty : decimal
Weight : decimal
UnitCost : decimal
}

let items =
{1..10}
|> Seq.map (fun x ->
{
Name = string x
DemandQty = decimal x
Weight = decimal x
UnitCost = decimal x
})

// This Works for a single value
let costSum =
items
|> Seq.sumBy (fun x -> x.DemandQty * x.UnitCost)

// This is similar to what I would like to do
let costSum, weightSum =
items
|> Seq.sumBy (fun x -> x.DemandQty * x.UnitCost, x.DemandQty * x.Weight)

理想情况下,我可以通过映射序列来计算我正在计算的多个值。我的想法在这里吗?

如果我必须多次迭代序列以计算我想要的所有总和,我也会有兴趣知道性能影响将是什么。我的看法是,这将是低效的。

最佳答案

一个简单的求和方法是用 sum 函数折叠序列:

let costSum, weightSum =
items
|> Seq.fold
(fun (costSum, weightSum) x -> (costSum + x.DemandQty * x.UnitCost, weightSum + x.DemandQty * x.Weight))
(0m, 0m)

至于多次迭代序列的性能影响是它取决于。重复遍历序列的工作。因此,从表面上看,效率较低。然而,当重复迭代次数恒定时,对于较短的序列,性能影响可能可以忽略不计。计算复杂性理论还指出,当元素数量增加时,常量是可以忽略的。

简而言之,如果重要的话,以预期输入为基准。如果它没有足够大的影响,请选择提供最佳清晰度的解决方案。

关于F# 对 Seq<'T> 中的多个字段求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48107277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com