在元素更改时更新聚合值的算法

时间:2010-01-25 19:14:20

标签: c# real-time aggregation

(我正在使用C#,但这不一定是特定于平台的)

假设我有一个值表,它由三个键(A,B,C)索引。表中的值以零星的间隔从外部源流入。我想在各种密钥集上发布聚合,例如计算B = b1的所有值的总和。

如果我每次只遍历整个表格,这是微不足道的,但显然效率不高。我想知道的是,是否有一种特别好的方法来设计这样的东西,以便当表中的值发生变化而影响此总和时,我只更新sum(B = b1)?看起来我需要创建某种Aggregation对象来维护该聚合中包含的每个值的列表,但我觉得可能有一种更优雅的方式可以逃避我。像“实时”LINQ查询......

2 个答案:

答案 0 :(得分:1)

使用Dictionary<TypeOfB, int>。每次添加新b时,请执行

dictionary[b] += value;

如果值发生变化,请执行

dictionary[b] += (newValue - oldValue)

答案 1 :(得分:0)

嗯,对于您提供的简单示例,为什么不发布一个事件,比如说OnValueChanging表示即将发生变化的值?然后你可以记录当前值,比如x。然后触发另一个事件OnValueChanged并记录新值,例如y。然后,您要更新的总和是currentSum - x + y