如何计算数组中数字的频率?

时间:2019-01-27 04:52:47

标签: c#

我有一个数组,我想计算它出现的实例数。

示例输入:

int[] a = new int[]{1,1,1,2,3,4,4};

输出:

1  3
2  1
3  1
4  2

到目前为止,我能够获得与众不同,但无法计数。

public static void arrayfrequency(int[] a)
{
    //store the distinct list
    var GetDistinct = a.Distinct().ToArray();

    foreach (int index in GetDistinct)
    {
        Console.WriteLine(index);
    }
}

2 个答案:

答案 0 :(得分:7)

您可以使用GroupBy和Count使用Linq来实现它。

int[] a=new int[]{1,1,1,2,3,4,4};
foreach(var item in a.GroupBy(x=>x))
{
    Console.WriteLine($"{item.Key} {item.Count()}");
}

GroupBy会将所有相似的值分组在一起,而Count可以返回每个组中的项目数,有效地是重复项的计数。

逐步了解它,以下是GroupBy的图形表示形式

enter image description here

现在,您要做的就是为循环中每个键的显示计数。

用于样本输入的输出

1 3
2 1
3 1
4 2

答案 1 :(得分:1)

您可以使用字典:

public static void arrayfrequency(int[] a)
{
    var result = new Dictionary<int,int>();
    foreach (int item in a)
    {
        if (!result.ContainsKey(item))
        {
            result.Add(item, 1);
        }
        else
        { 
            result[item]++;
        }
    }

    foreach(var key in result.Keys)
    {
        Console.WriteLine("{0} {1}", key, result[key]);
    }
}