Страницы

Поиск по вопросам

четверг, 5 декабря 2019 г.

Как сосчитать количество определенных элементов в списке c#?

#c_sharp #алгоритм


Есть список, состоящий из объектов. Все эти объекты отличаются значением одного поля.
Задача состоит в том, чтобы вывести количество объектов для каждого значения этого поля.
    


Ответы

Ответ 1



Пусть список называется list, а поле по которому считаем называется Name, тогда var result = list.GroupBy(n => n.Name).Select(m => new {m.Key, Count = m.Count()}); Это у нас будет LINQ вариант, на тот случай если не захотите создавать свой "велосипед", а воспользуетесь штатными средствами языка. В противном случае @rdorn дал отличный ответ.

Ответ 2



Наивный алгоритм: Создаем Dictionary со значением проверяемого поля в качестве ключа и счетчиком найденных объектов в качестве значения Для каждого объекта объекта из списка: Добавляем новую запись в Dictionary, если обнаруженный ключ отсутствует. Увеличиваем счетчик найденного значения на единицу если ключ уже есть в Dictionary. Выводим значения счетчиков Dictionary UPD Сложность алгоритма порядка O(N), где N - длина списка. Согласно исходникам Dictinary использует хеширование ключей и сложность поиска по ключу порядка O(1).

Комментариев нет:

Отправить комментарий