我是C#的新手,希望我能在这个主题上得到一些帮助。我有一个包含元素的数组,我需要显示每个项目出现的次数。
例如,在[1, 2, 3, 4, 4, 4, 3]
中,1
出现一次,4
出现三次,依此类推。
我做了以下但不知道如何将它放在foreach / if语句中......
int[] List = new int[]{1,2,3,4,5,4,4,3};
foreach(int d in List)
{
if("here I want to check for the elements")
}
谢谢你,对不起,如果这是一个非常基本的...
答案 0 :(得分:12)
您可以通过Enumerable.GroupBy处理此问题。我建议您查看有关Count和GroupBy的C# LINQ samples部分以获取指导。
在您的情况下,这可以是:
int[] values = new []{1,2,3,4,5,4,4,3};
var groups = values.GroupBy(v => v);
foreach(var group in groups)
Console.WriteLine("Value {0} has {1} items", group.Key, group.Count());
答案 1 :(得分:7)
您可以保留Dictionary
项找到的项目及其相关计数。在下面的示例中,dict[d]
通过其值引用元素。例如d = 4
。
int[] List = new int[]{1,2,3,4,5,4,4,3};
var dict = new Dictionary<int, int>();
foreach(int d in List)
{
if (dict.ContainsKey(d))
dict[d]++;
else
dict.Add(d, 1);
}
当foreach
循环终止时,dict
中每个唯一值都有一个条目。您可以通过访问dict[d]
获取每个项目的计数,其中d
是原始列表中的某个整数值。
答案 2 :(得分:3)
LINQ的答案很好,但是如果你想自己做的话:
int[] numberFound = new int[6];
int[] List = new int[] { 1, 2, 3, 4, 5, 4, 4, 3 };
foreach (int d in List)
{
numberFound[d]++;
}
答案 3 :(得分:1)
var list = new int[] { 1, 2, 3, 4, 5, 4, 4, 3 };
var groups = list.GroupBy(i => i).Select(i => new { Number = i.Key, Count = i.Count() });
答案 4 :(得分:-1)
private static void CalculateNumberOfOccurenceSingleLoop()
{
int[] intergernumberArrays = { 1, 2, 3, 4, 1, 2, 4, 1, 2, 3, 5, 6, 1, 2, 1, 1, 2 };
Dictionary<int, int> NumberOccurence = new Dictionary<int, int>();
for (int i = 0; i < intergernumberArrays.Length; i++)
{
if (NumberOccurence.ContainsKey(intergernumberArrays[i]))
{
var KeyValue = NumberOccurence.Where(j => j.Key == intergernumberArrays[i]).FirstOrDefault().Value;
NumberOccurence[intergernumberArrays[i]] = KeyValue + 1;
}
else
{
NumberOccurence.Add(intergernumberArrays[i], 1);
}
}
foreach (KeyValuePair<int, int> item in NumberOccurence)
{
Console.WriteLine(item.Key + " " + item.Value);
}
Console.ReadLine();
}