如何在c#中查找或计算多维数组中的重复项

我在 c# 中创建一个二维 (3 * 3)数组,它必须计算或找到重复值


int[,] arr = new int[3, 3] {

   {1, 2, 6},

   {4, 1, 5},

   {6, 1, 8}

};

我预计输出有1并且6是重复值


for仅适用于带循环的初学者


ibeautiful
浏览 176回答 3
3回答

UYOU

你可以试试HashSet<int>,例如&nbsp; &nbsp;int[,] arr = new int[3, 3] {&nbsp; &nbsp; &nbsp; {1, 2, 6 },&nbsp;&nbsp; &nbsp; &nbsp; {4, 1, 5 },&nbsp;&nbsp; &nbsp; &nbsp; {6, 1, 8 }&nbsp; &nbsp;};&nbsp; &nbsp;HashSet<int> unique = new HashSet<int>();&nbsp; &nbsp;foreach (var item in arr)&nbsp; &nbsp; &nbsp;if (!unique.Add(item))&nbsp; &nbsp; &nbsp; &nbsp;Console.WriteLine(item);&nbsp; // Not unique, print it out结果:&nbsp; 1&nbsp; 6&nbsp; 1如果我们想打印每个副本一次,我们可以添加另一个HashSet<int>:&nbsp; &nbsp;HashSet<int> unique = new HashSet<int>();&nbsp; &nbsp;HashSet<int> duplicates = new HashSet<int>();&nbsp; &nbsp;foreach (var item in arr)&nbsp; &nbsp; &nbsp;if (!unique.Add(item))&nbsp; &nbsp; &nbsp; &nbsp;duplicates.Add(item);&nbsp;&nbsp;&nbsp; &nbsp;foreach (var item in duplicates)&nbsp; &nbsp; &nbsp;Console.WriteLine(item);最后,如果您想计算重复出现的次数,我们可以更改HashSet<int> duplicates为Dictionary<int, int> duplicates:&nbsp; &nbsp;HashSet<int> unique = new HashSet<int>();&nbsp; &nbsp;Dictionary<int, int> duplicates = new Dictionary<int, int>();&nbsp; &nbsp;foreach (var item in arr)&nbsp; &nbsp; &nbsp;if (!unique.Add(item))&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (duplicates.TryGetValue(item, out int count))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;duplicates[item] = count + 1;&nbsp; &nbsp; &nbsp; &nbsp;else&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;duplicates[item] = 2;&nbsp;&nbsp; &nbsp;foreach (var item in duplicates)&nbsp; &nbsp; &nbsp;Console.WriteLine($"{item.Key} appears {item.Value} times");编辑:您可以将foreach循环更改为嵌套 for循环,例如:所有重复项&nbsp; &nbsp;for (int i = 0; i < arr.GetLength(0); ++i)&nbsp; &nbsp; &nbsp;for (int j = 0; j < arr.GetLength(1); ++j)&nbsp; &nbsp; &nbsp; &nbsp;if (!unique.Add(arr[i, j]))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Console.WriteLine(arr[i, j]);&nbsp;Distinct duplicates&nbsp; &nbsp;HashSet<int> duplicates = new HashSet<int>();&nbsp; &nbsp;for (int i = 0; i < arr.GetLength(0); ++i)&nbsp; &nbsp; &nbsp;for (int j = 0; j < arr.GetLength(1); ++j)&nbsp; &nbsp; &nbsp; &nbsp;if (!unique.Add(arr[i, j]))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (duplicates.Add(arr[i, j]))&nbsp; &nbsp;// print distinct duplicate only&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Console.WriteLine(arr[i, j]);&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;

大话西游666

或许是这样的:var&nbsp;arr&nbsp;=&nbsp;new&nbsp;int[3,&nbsp;3]{{1,2,6},&nbsp;{4,1,5},&nbsp;{6,1,8}}; var&nbsp;duplicates&nbsp;=&nbsp;arr &nbsp;&nbsp;&nbsp;&nbsp;.Cast<int>() &nbsp;&nbsp;&nbsp;&nbsp;.GroupBy(n&nbsp;=>&nbsp;n) &nbsp;&nbsp;&nbsp;&nbsp;.Where(g&nbsp;=>&nbsp;g.Count()&nbsp;>&nbsp;1) &nbsp;&nbsp;&nbsp;&nbsp;.Select(g&nbsp;=>&nbsp;g.Key) &nbsp;&nbsp;&nbsp;&nbsp;.ToArray();.Cast<int>()使数组可用于 LINQ,.GroupBy(n => n)按值对数字进行分组,.Where(g => g.Count() > 1)计算组中的项目数,.Select(g => g.Key)仅返回组键 - 原始值。.Where(g => g.Count() > 1).Select(g => g.Count())返回每个的计数,或者根据需要对组进行操作。

jeck猫

效率不高,但您也可以将计数存储在字典中,然后打印计数大于 1 的键:var counts = new Dictionary<int, int>();for (int i = 0; i < arr.GetLength(0); i++){&nbsp; &nbsp; for (int j = 0; j < arr.GetLength(1); j++)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; var number = arr[i, j];&nbsp; &nbsp; &nbsp; &nbsp; if (!counts.ContainsKey(number))&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; counts[number] = 0;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; counts[number] += 1;&nbsp; &nbsp; }}foreach (var pair in counts){&nbsp; &nbsp; if (pair.Value > 1)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; Console.WriteLine(pair.Key);&nbsp; &nbsp; }}// 1// 6
打开App,查看更多内容
随时随地看视频慕课网APP