Мне нужно агрегировать некоторые значения массива из API в задании фоновой обработки в C#. Количество API может теоретически быть бесконечным, но, вероятно, никогда не будет больше 10.Как суммировать целое число данных наиболее эффективным способом?
API-интерфейсы возвращают простой список с UserID и Value. Чтобы использовать данные в моем приложении, мне нужно суммировать все значения для каждого отдельного UserID.
Пример-данные из двух интерфейсов:
От 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 были добавлены друг к другу?
Я смотрел Матрицы, которые, кажется, являются способом, но я не могу понять, как сделать добавление значений, не добавляя также UserID друг к другу?
(Я понимаю, что это можно решить с помощью некоторых вложенных циклов, но я ищу лучший способ);
Примечание. Пользовательские идентификаторы не являются последовательными.
последовательным, вы имеете в виду отсортирован? Ie, может ли поток быть [3,10], [1,13]? Вы хотите, чтобы результат сортировался? Являются ли UserIds всегда целыми числами? – willem
Я предполагаю, что Linq не достаточно быстро? 'var results = api1Results.Join (api2Results, api1 => api1.UserId, api2 => api2.UserId, (api1, api2) new {UserId = api1.UserId, Value = api1.Value + api2.Value})' – Smudge202
@willem Могут быть «пробелы», [1,2,4], где 3 не находится в первом результате, но может быть во втором результате. Сортировка не имеет значения. Да, всегда целые числа. –