3 回答
TA贡献1878条经验 获得超4个赞
你可以试试HashSet<int>,例如
int[,] arr = new int[3, 3] {
{1, 2, 6 },
{4, 1, 5 },
{6, 1, 8 }
};
HashSet<int> unique = new HashSet<int>();
foreach (var item in arr)
if (!unique.Add(item))
Console.WriteLine(item); // Not unique, print it out
结果:
1
6
1
如果我们想打印每个副本一次,我们可以添加另一个HashSet<int>:
HashSet<int> unique = new HashSet<int>();
HashSet<int> duplicates = new HashSet<int>();
foreach (var item in arr)
if (!unique.Add(item))
duplicates.Add(item);
foreach (var item in duplicates)
Console.WriteLine(item);
最后,如果您想计算重复出现的次数,我们可以更改HashSet<int> duplicates为Dictionary<int, int> duplicates:
HashSet<int> unique = new HashSet<int>();
Dictionary<int, int> duplicates = new Dictionary<int, int>();
foreach (var item in arr)
if (!unique.Add(item))
if (duplicates.TryGetValue(item, out int count))
duplicates[item] = count + 1;
else
duplicates[item] = 2;
foreach (var item in duplicates)
Console.WriteLine($"{item.Key} appears {item.Value} times");
编辑:您可以将foreach循环更改为嵌套 for循环,例如:
所有重复项
for (int i = 0; i < arr.GetLength(0); ++i)
for (int j = 0; j < arr.GetLength(1); ++j)
if (!unique.Add(arr[i, j]))
Console.WriteLine(arr[i, j]);
Distinct duplicates
HashSet<int> duplicates = new HashSet<int>();
for (int i = 0; i < arr.GetLength(0); ++i)
for (int j = 0; j < arr.GetLength(1); ++j)
if (!unique.Add(arr[i, j]))
if (duplicates.Add(arr[i, j])) // print distinct duplicate only
Console.WriteLine(arr[i, j]);
TA贡献1817条经验 获得超14个赞
或许是这样的:
var arr = new int[3, 3]{{1,2,6}, {4,1,5}, {6,1,8}}; var duplicates = arr .Cast<int>() .GroupBy(n => n) .Where(g => g.Count() > 1) .Select(g => g.Key) .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())
返回每个的计数,或者根据需要对组进行操作。
TA贡献1909条经验 获得超7个赞
效率不高,但您也可以将计数存储在字典中,然后打印计数大于 1 的键:
var counts = new Dictionary<int, int>();
for (int i = 0; i < arr.GetLength(0); i++)
{
for (int j = 0; j < arr.GetLength(1); j++)
{
var number = arr[i, j];
if (!counts.ContainsKey(number))
{
counts[number] = 0;
}
counts[number] += 1;
}
}
foreach (var pair in counts)
{
if (pair.Value > 1)
{
Console.WriteLine(pair.Key);
}
}
// 1
// 6
- 3 回答
- 0 关注
- 168 浏览
添加回答
举报