Допустим есть массив: string[] names = new {"иван", "катя", "максим", "катя", "катя", "иван", "лёша"}
Мне нужно получить имя, которое встречается большее кол-во раз. Т.е. в данном примере я должен получить катя
.
Для этой цели можно использовать LINQ:
string name = names.GroupBy(x => x).OrderByDescending(x => x.Count()).First().Key
Очень часто требуется такой функционал - выбор элемента со значением, которое является максимальным по некоторому критерию.
Он есть в библиотеке morelinq
Приведу несколько упрощенный вариант метода MaxBy
из этой библиотеки:
static class EnumerableHelper
{
public static T MaxBy<T>(this IEnumerable<T> source, Func<T, int> selector)
{
var max = default(T);
int? maxKey = null;
foreach (T candidate in source)
{
int candidateKey = selector(candidate);
if (!maxKey.HasValue || candidateKey > maxKey.Value)
{
max = candidate;
maxKey = candidateKey;
}
}
if (!maxKey.HasValue)
throw new InvalidOperationException("Последовательность не содержит элементов");
return max;
}
}
Использование:
string name = names.GroupBy(s => s).MaxBy(g => g.Count()).Key;
Этот вариант эффективнее, чем вариант с сортировкой, предложенный в этом ответе
Еще вариант, который также не использует сортировку и имеет сложность O(n):
string[] names = { "иван", "катя", "максим", "катя", "катя", "иван", "лёша" };
var dict = names.GroupBy(s => s).ToDictionary(g => g.Key, g => g.Count());
int max = dict.Values.Max();
string name = dict.First(d => d.Value == max).Key;
Можно использовать словарь
Dictionary<string, int> dictionary =
new Dictionary<string, int>();
Проходя по массиву, добавляете значение слова в словарь, если его нет, или увеличиваете значение на 1, если уже есть.
dictionary.Add("катя", 1);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Каким способом можно перехватить запуск файла через приложение?
На форме не отображаются некоторые элементы, а некоторые отображаются не полностью