C# 当元素更改时更新聚合值的算法

C# 当元素更改时更新聚合值的算法,c#,real-time,aggregation,C#,Real Time,Aggregation,(我使用的是C#,但这不一定是特定于平台的) 假设我有一个值表,它由三个键(a,B,C)组成索引。表中的值以零星间隔从外部源流入。我想发布多组键的聚合,例如,计算B=b1的所有值的总和 如果每次只迭代整个表,这是很简单的,但显然这是不高效的。我想知道的是,有没有一种特别好的方法来设计这样一个东西,这样当表中的某个值改变会影响这个总和时,我只更新sum(B=b1)?似乎我需要创建某种类型的Aggregation对象来维护包含在该聚合中的每个值的列表,但我觉得可能有一种更优雅的方式让我无法理解。类似

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

假设我有一个值表,它由三个键(a,B,C)组成索引。表中的值以零星间隔从外部源流入。我想发布多组键的聚合,例如,计算B=b1的所有值的总和


如果每次只迭代整个表,这是很简单的,但显然这是不高效的。我想知道的是,有没有一种特别好的方法来设计这样一个东西,这样当表中的某个值改变会影响这个总和时,我只更新
sum(B=b1)
?似乎我需要创建某种类型的
Aggregation
对象来维护包含在该聚合中的每个值的列表,但我觉得可能有一种更优雅的方式让我无法理解。类似于“实时”LINQ查询…

对于您介绍的简单示例,为什么不创建一个事件,例如,
OnValueChanging
,以指示即将更改的值?然后可以记录当前值,例如,
x
。然后触发另一个事件
OnValueChanged
,并记录新值,例如
y
。那么,您要更新的总和是
currentSum-x+y

好吧,对于您介绍的简单示例,为什么不使用一个事件,比如,
OnValueChanging
,它指示即将更改的值?然后可以记录当前值,例如,
x
。然后触发另一个事件
OnValueChanged
,并记录新值,例如
y
。然后,您要更新的总和是
currentSum-x+y

使用
字典。每次你添加一个新的b,都要

dictionary[b] += value;
如果某个值发生更改,请执行以下操作:

dictionary[b] += (newValue - oldValue)
使用
词典
。每次你添加一个新的b,都要

dictionary[b] += value;
如果某个值发生更改,请执行以下操作:

dictionary[b] += (newValue - oldValue)

这是可行的,但值来自另一台机器。我猜发送的消息可能包括新值和旧值,我没有想到。这会起作用,但值来自另一台机器。我猜发送的消息可能包括新值和旧值,我没有想到。请发布代码示例让我们开始…请发布代码示例让我们开始…您在下面声明的机器只发送新值。我觉得它发送了四个东西:
(a,b,c)
,这样您就可以跟踪接收端的旧值。否则,如果接收端上的任何内容实际上不需要新值,您只需发送
(newValue-oldValue)
(当然还有
b
)来更新总和。您在下面说明了机器只发送新值。我觉得它发送了四个东西:
(a,b,c)
,这样您就可以跟踪接收端的旧值。否则,如果接收端上的任何内容实际上都不需要新值,则只需发送
(newValue-oldValue)
(当然还有
b
)来更新总和。