我有一个数组,我想计算它出现的实例数。
示例输入:
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);
}
}
答案 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的图形表示形式
现在,您要做的就是为循环中每个键的显示计数。
用于样本输入的输出
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]);
}
}