如何以最有效的方式聚合数据整数?

时间:2012-02-14 13:21:35

标签: c# aggregate calculator aggregation mathematical-optimization

我需要在c#中的后台处理作业中聚合来自API的一些数组值。理论上,API的数量可以是无限的,但可能永远不会超过10个。

API返回一个包含UserID和Value的简单列表。要在我的应用程序中使用数据,我需要将每个不同UserID的所有值相加。

示例 - 来自两个API的数据:

来自API 1:

[1, 240] (Note: The data is organized as [UserID, Value])
[2, 160]
[3, 12568]
[4, 1780]
[...]

来自API 2:

[1, 10]
[2, 10]
[3, 10]
[4, 10]
[...]

期望的结果:

[1, 250]
[2, 170]
[3, 12578]
[4, 1790]
[...]

如何以最有效的方式制作一个所需的列表,其中每个UserID的值已相互添加?

我一直在寻找Matrixes,这似乎是一种方式,但我无法弄清楚如何在不添加UserID的情况下添加值?

(我意识到它可以通过一些嵌套循环来解决,但我正在寻找更好的方法);

注意:UserID不是顺序的。

1 个答案:

答案 0 :(得分:1)

使用Dictionary<int,int>可能比以任何其他方式烹饪的任何内容都快,即使查找UserId是否已作为密钥包含在内。

即:

var results = Dictionary<int,int>();
foreach (var api in apis)
    foreach(var value in api.GetValues())
        if (!result.HasKey(value.UserID))
            result[value.UserId] = value.Value;
        else
            result[value.UserId] += value.Value;