Самый простой способ - использовать GroupBy
:
var lettersWithMultipleOccurences = letters.GroupBy(x => x)
.Where(g => g.Count() > 1)
.Select(g => g.Key);
Это сначала сгруппирует ваш массив, используя буквы в качестве ключей. Затем он возвращает только те группы с несколькими записями и возвращает ключ этих групп. В результате у вас будет IEnumerable<string>
, содержащий все буквы, которые встречаются более одного раза в исходном массиве. В вашем примере это только «а».
Осторожно: поскольку LINQ реализован с использованием отложенного выполнения, при перечислении lettersWithMultipleOccurences
несколько раз будет выполняться группировка и фильтрация несколько раз. Чтобы избежать этого, позвоните ToList()
по результату:
var lettersWithMultipleOccurences = letters.GroupBy(x => x)
.Where(g => g.Count() > 1)
.Select(g => g.Key).
.ToList();
lettersWithMultipleOccurences
теперь будет иметь тип List<string>
.