在数组中找到FEW最常见的元素

时间:2016-09-27 11:15:44

标签: c# arrays

我已经创建了一个方法,可以在数组中查找一个最常用的数字以及重复多少次。但是,我的任务是找到少量数字,如果它们重复相同的次数。我应该创建另一种方法还是如何找到解决方案?

 public static void most(Ring[] rings, int numCounter, out int popHallmark, out int amount)
    {
        amount = 1;
        popHallmark = 0;
        for (int i = 0; i < numCounter; i++)
        {
            int count = 0;
            int temp = rings[i].HallMark;
            count++;
            for (int k = 0; k < numCounter; k++)
            {
                if (i != k)
                {
                    if (k > i)
                    {
                        if (temp == rings[k].HallMark)
                        {
                            count++;
                            if (count > amount)
                            {
                                popHallmark = temp; // most popular hallmark
                                amount = count; //amount of rings that has this hallmark
                            }
                        }
                    }
                }
            }
        }
    }

1 个答案:

答案 0 :(得分:3)

您可以使用GroupBy() linq方法。 假设你有一个int数组,你可以这样做:

var groupedNumbers = yourArray.GroupBy(x=>x)

这意味着每个组都包含相同的数字。 接下来,您需要在每个组上调用Count()方法以获取组包含的元素数量。

var numberCount = groupedNumberes.Select(x=>new{
    number = x.Key,
    numberOfOccurrences = x.Count
})

numberCount将包含一组匿名对象,其中包含数字和重复次数。 希望这对你有所帮助。

修改 您可以订购numberCount并获得&#34; FEW&#34;你需要的数字:

numberCount.OrderByDescending(x=>x.numberOfOccurrences).Take(howManyNumbersYouNeed).Select(x=>x.number)