2016-12-05 3 views
1

У меня есть список, который автоматически генерируетсяНайти дубликаты, которые появляются ровно в два раза в списке

var v = new List<int>(1000); 
var generateur = new Random(1); 
for (int i = 0; i != 1000; ++i) 
    v.Add(generateur.Next(10000)); 

И я хочу, чтобы найти, сколько число повтор ровно в два раза, используя только один lambda expression.

+4

Теперь мы теперь, что вы хотите. Что вы пытались получить? :) – Pikoh

+0

int nbValeurDouble = v.GroupBy (i => i). Где (g => g.Count() == 2); –

+0

Я довольно новичок в программировании и считаю довольно сложным сделать это только в одном выражении: P –

ответ

3

Если я правильно понял ваш вопрос (и целое число, которое вы используете в качестве результата в коде комментарии), кажется, что вы хотите подсчитать количество раз, когда появляется группа из двух чисел. Не список этих чисел.

Затем раствор

int repeated = v.GroupBy(x => x).Where(g => g.Count() == 2).Count(); 
+1

Я думаю, что вы правы Стив, я интерпретировал его как возвращающий список тех, которые повторялись против общего количества, но после повторного чтения это ваше решение самый правильный '+ 2' – MethodMan

+1

@MethodMan Первоначально я думал о том же строчке и выбрал ваш ответ как правильный (не обманывать) и перешел к другому вопросу, но затем, пересматривая его комментарий, замечаю детали. – Steve

+0

Я могу получить то же самое, если я добавлю следующее, чтобы позволить альтернативам OP 2 1 вернуть список чисел, которые были в списке ровно 2 раза, или вернуть общее количество того, сколько дубликатов было в списке ровно 2 раза. см. также мое дополнительное обновление – MethodMan

3
List<String> listDup = new List<String> { "6", "1", "2", "4", "6", "5", "1" }; 
var duplicates = listDup.GroupBy(n => n) 
       .Where(grp => grp.Count() == 2) 
       .Select(grp => grp.Key).ToList(); 

Уступает списку, содержащему 6 и 1, поскольку они отображаются ровно дважды в списке.

используя код выше, чтобы получить общее количество элементов, которые были в списке 2 раза

int count2Times = listNonDup.GroupBy(x => x).Where(x => x.Count() == 2).Count();