C# - Одинаковые данные в массиве

253
30 сентября 2017, 19:32

Допустим есть массив: string[] names = new {"иван", "катя", "максим", "катя", "катя", "иван", "лёша"} Мне нужно получить имя, которое встречается большее кол-во раз. Т.е. в данном примере я должен получить катя.

Answer 1

Для этой цели можно использовать LINQ:

string name = names.GroupBy(x => x).OrderByDescending(x => x.Count()).First().Key
Answer 2

Очень часто требуется такой функционал - выбор элемента со значением, которое является максимальным по некоторому критерию.

Он есть в библиотеке 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;
Answer 3

Можно использовать словарь

Dictionary<string, int> dictionary =
    new Dictionary<string, int>();

Проходя по массиву, добавляете значение слова в словарь, если его нет, или увеличиваете значение на 1, если уже есть.

dictionary.Add("катя", 1);
READ ALSO
c# ошибка при сериализации

c# ошибка при сериализации

Собственно текст ошибки:

228
Как запустить файл через приложение?

Как запустить файл через приложение?

Каким способом можно перехватить запуск файла через приложение?

265
Не отрисовываются элементы на форме

Не отрисовываются элементы на форме

На форме не отображаются некоторые элементы, а некоторые отображаются не полностью

201