【发布时间】:2012-02-14 13:21:34
【问题描述】:
我需要在 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,这似乎是一种方法,但我不知道如何在不相互添加用户 ID 的情况下添加值?
(我意识到它可以通过一些嵌套循环来解决,但我正在寻找更好的方法);
注意:用户 ID 不是连续的。
【问题讨论】:
-
按顺序,你的意思是排序吗?即,流可以是 [3,10]、[1,13] 吗?你想对输出进行排序吗? UserId 总是整数吗?
-
我猜 Linq 不够快?
var results = api1Results.Join(api2Results, api1 => api1.UserId, api2 => api2.UserId, (api1, api2) new { UserId = api1.UserId, Value = api1.Value + api2.Value}) -
@willem 可能存在“间隙”,[1,2,4],其中 3 不在第一个结果中,但可能在第二个结果中。排序无关紧要。是的,总是整数。
-
UserId 总是那么小吗?您希望拥有多少用户?对于少数用户和如此小的 ID,您可以使用桶排序中的想法。
-
@Smudge202 对于列出它可能是,但如果使用 10 仍然是?我有一种感觉,这一定是更好的方法。
标签: c# aggregate calculator aggregation mathematical-optimization