.Net Как получить общие элементы в списке по количеству

Я хочу что-то вроде этого, но он не компилируется:

List<uint> numbers = new List<uint> { 4, 2, 2, 2, 2, 7};
var List_Of_Count_4_Elements = numbers.Where(x => x.Count() == 4).Select(x => x.Key).ToList();

// The result should look like this:
List_Of_Count_4_Elements[0] == 2;

Всего 2 ответа


Вы должны сделать что-то вроде этого:

List<uint> numbers = new List<uint> { 4, 2, 2, 2, 2, 7};
var List_Of_Count_4_Elements = numbers.GroupBy(x => x).Where(x => x.Count() == 4).Select(x => x.Key).ToList();

Вы можете сгруппировать предметы, а затем вы можете узнать, какое число четыре раза в вашем списке.


демо на дотнет скрипке

Вы должны сгруппировать по первым.

    List<uint> numbers = new List<uint> { 4, 2, 2, 2, 2, 7};
    var Max_Elements_Count = 4;

    var result1 = numbers.GroupBy(p => p)
                        .Where(x => x.Count() == Max_Elements_Count)
                        .Select(x => x.Key).ToList();   

    var result2 = numbers.GroupBy(p => p, (k, group) =>  new { Key = k, Element_Count = group.Count() })
                         .Where(x => x.Element_Count == Max_Elements_Count).ToList();


    var result3 = (from n in numbers
                  group n by n into groupList
                  where  groupList.Count() == Max_Elements_Count
                  select groupList.Key).ToList();

    Console.WriteLine(result1[0]);
    Console.WriteLine(result2[0].Key);
    Console.WriteLine(result3[0]);

Есть идеи?

10000