Как агрегировать целочисленные данные наиболее эффективным способом? - PullRequest
0 голосов
/ 14 февраля 2012

Мне нужно объединить некоторые значения массива из API в задании фоновой обработки в c #. Число API в теории может быть бесконечным, но, вероятно, никогда не будет больше 10.

API возвращают простой список с UserID и Value. Чтобы использовать данные в моем приложении, мне нужно сложить все значения для каждого отдельного идентификатора пользователя.

Пример данных из двух 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 друг к другу?

(я понимаю, что это можно решить с помощью некоторых вложенных циклов, но я ищу лучший путь);

Примечание. Идентификаторы пользователя не являются последовательными.

1 Ответ

1 голос
/ 14 февраля 2012

Использование 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...