(我正在使用C#,但这不一定是特定于平台的)
假设我有一个值表,它由三个键(A,B,C)索引。表中的值以零星的间隔从外部源流入。我想在各种密钥集上发布聚合,例如计算B = b1的所有值的总和。
如果我每次只遍历整个表格,这是微不足道的,但显然效率不高。我想知道的是,是否有一种特别好的方法来设计这样的东西,以便当表中的值发生变化而影响此总和时,我只更新sum(B = b1)
?看起来我需要创建某种Aggregation
对象来维护该聚合中包含的每个值的列表,但我觉得可能有一种更优雅的方式可以逃避我。像“实时”LINQ查询......
答案 0 :(得分:1)
使用Dictionary<TypeOfB, int>
。每次添加新b时,请执行
dictionary[b] += value;
如果值发生变化,请执行
dictionary[b] += (newValue - oldValue)
答案 1 :(得分:0)
嗯,对于您提供的简单示例,为什么不发布一个事件,比如说OnValueChanging
表示即将发生变化的值?然后你可以记录当前值,比如x
。然后触发另一个事件OnValueChanged
并记录新值,例如y
。然后,您要更新的总和是currentSum - x + y
。