计算 ListRelation 范围的总和

calculating sum of ListRelation range

我有一个名为 PLOC 的 ListRelation,类型为:

lrel[loc, int] PLOCs = [<a, calcPLOC(a)> | a <- files];

其中 files 是一组位置,calcPLOC 根据该位置计算一个整数。

现在我想要所有计算出的整数的总和。我用了 3 种不同的方法来计算这个,得到了 2 个不同的答案:

1:

total = 0;
for (<a, b> <- PLOCs) { 
    total += b;
}
println("total PLOC: <total>"); // returns 23805

2:

total = sum(range(PLOCs));
println("total PLOC: <total>"); // returns 21313

3:

total = (0 | it + b | <a, b> <- PLOCs);
println("total PLOC: <total>"); // returns 23805

为什么第二种方法 return 不同的结果?

ListRelation "squeezes" 中的范围函数排除了重复的条目,但保留了它们的顺序。