【发布时间】:2018-11-25 22:18:37
【问题描述】:
我能够在 C# 中进行此练习,但在 F# 中复制此练习时遇到问题。我有以下TransactionFs 类型的序列:
type TransactionFs(Debitor: string, Activity:string, Spend:float, Creditor:string) =
member this.Debitor = Debitor
member this.Activity = Activity
member this.Spend = Spend
member this.Creditor = Creditor
顺序:
[FSI_0003+TransactionFs {Activity = "someActivity1";
Creditor = "alessio";
Debitor = "luca";
Spend = 10.0;};
FSI_0003+TransactionFs {Activity = "someActivity2";
Creditor = "alessio";
Debitor = "giulia";
Spend = 12.0;};
FSI_0003+TransactionFs {Activity = "someActivity3";
Creditor = "luca";
Debitor = "alessio";
Spend = 7.0;};
我正在尝试使用以下规则获取TransactionFs 的序列。对于每笔交易,检查Debitor 和Creditor;在序列中查找所有对应的交易,其中Debitor 和Creditor 被交换并返回单个TransactionFs 具有Spend 属性,该属性是最大Spend 持有人的总债务(减去或求和) Spend 适当)。这个Spend 将代表从Debitor 到Creditor 的总债务。
例如,Creditor 和 Debitor 对 alessio 和 luca 的结果应该是:
TransactionFs {Activity = "_aggregate_";
Creditor = "alessio";
Debitor = "luca";
Spend = 3.0;};
当然,这样做的一种方法是使用嵌套的 for 循环,但由于我正在学习 F#,所以我想知道什么是正确的函数式方法。
【问题讨论】: