#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).
Комментариев нет:
Отправить комментарий