Подтвердить что ты не робот

Возвращать максимальное количество повторений в списке

        List<string> prod = new List<string>();
        prod.Add("dfg");
        prod.Add("dfg");
        prod.Add("ojj");
        prod.Add("dfg");
        prod.Add("e");

В приведенном выше коде prod List имеет элемент "dfg", повторяющийся трижды (максимальное количество)... Я хочу "dfg" как результат, потому что этот элемент повторяется максимум раз. Может ли кто-нибудь помочь в этом

4b9b3361

Ответ 1

Вы можете использовать LINQ:

string maxRepeated = prod.GroupBy(s => s)
                         .OrderByDescending(s => s.Count())
                         .First().Key;

Ответ 2

Не самый эффективный, но он работает:

var maxRepeatedItem = prod.GroupBy(x => x)
                          .OrderByDescending(x => x.Count())
                          .First().Key;

Это более эффективно:

var maxRepeatedItem = prod.GroupBy(x => x)
                          .MaxBy(x => x.Count())
                          .First().Key;

но для этого требуется MoreLinq расширение MaxBy

ИЗМЕНИТЬ (в соответствии с комментарием):

Если вы хотите all максимальные повторяющиеся элементы в случае связей, здесь можно найти решение:

var grouped = prod.ToLookup(x => x);
var maxRepetitions = grouped.Max(x => x.Count());
var maxRepeatedItems = grouped.Where(x => x.Count() == maxRepetitions)
                              .Select(x => x.Key).ToList();