int[] a = new int[] { 1, 2, 3, 4 };
int[] b = new int[] { 5, 6, 1, 2, 7, 8 };
int Count = 0;
for (int i = 0; i < a.Length; i++)
{
for (int j = 0; j < b.Length; j++)
{
if (a[i] == b[j])
{
Count++;
break;
}
}
}
Console.WriteLine(Count);
Console.ReadLine();
上面是一个简单的程序,可以搜索两个数组并查找它们之间的重复项。但是当我将第一个数组作为2D数组时遇到困难,因为我得到一个错误,运行下面的代码“索引超出了数组的范围。”我真的无法弄清楚该做什么,所以我会感激任何帮助。
int[][] a = {new int[] { 1, 2, 3, 4 }, new int[] { 3, 9, 9 }};
int[] b = new int[] { 5, 6, 1, 2, 7, 8 };
int Count = 0;
for (int i = 0; i < a.Length; i++)
{
for (int j = 0; j < b.Length; j++)
{
if (b[j] == a[i][j])
{
Count++;
break;
}
}
}
Console.WriteLine(Count);
Console.ReadLine();
答案 0 :(得分:1)
//initialize stuff here
for(int i = 0; i<a.length; ++i) {//iterate over the rows in a
for(int j = 0; j<a[i].length; ++j) {//iterate over columns in a
for(int k = 0; k < b.length; ++k) {//iterate over b
if(a[i][j] == b[k]) {
//increment stuff here
}//end if
}//end for k
}//end for j
//print stuff for each sub array here
}end for i
//print stuff here for all sub arrays
答案 1 :(得分:1)
我假设您要在2d数组和1d数组之间找到重复项。
int[][] a = { new int[] { 1, 2, 3, 4 }, new int[] { 3, 9, 9 } };
int[] b = new int[] { 5, 6, 1, 2, 7, 8 };
int Count = 0;
for (int h = 0; h < a.Length; h++)
{
for (int i = 0; i < a[h].Length; i++)
{
for (int j = 0; j < b.Length; j++)
{
if (b[j] == a[h][i])
{
Count++;
break;
}
}
}
}
或者在Linq;)
int Count = (from i in a from j in i from k in b where k == j select j).Count();
=在a2和b之间找到2个重复项?
修改新规范
第二次编辑,用于存储每个2d数组元素的重复项。
var duplicates = new List<int>();
foreach (var i in a)
{
var duplicate = 0;
foreach (var j in i)
{
foreach (var k in b)
{
if (k == j)
{
duplicate++;
}
}
}
duplicates.Add(duplicate);
}
或再次linq;)
var duplicates = a.Select(i => (from j in i from k in b where k == j select j).Count()).ToList();
更新3: 对于您选择的代码格式:
var duplicates = new List<int>();
for (int h = 0; h < a.Length; h++)
{
var duplicate = 0;
for (int i = 0; i < a[h].Length; i++)
{
for (int j = 0; j < b.Length; j++)
{
if (b[j] == a[h][i])
{
duplicate++;
break;
}
}
}
duplicates.Add(duplicate);
}
添加了重复输出:
for (int d = 0; d < duplicates.Count; d++)
{
Console.WriteLine(duplicates[d]);
}
答案 2 :(得分:1)
您可以尝试使用foreach
foreach (var val1 in a)
{
foreach (var val2 in val1)
{
foreach (var val3 in b)
{
if (val3 == val2)
{
Count++;
}
}
}
}
或另一个
for (int i = 0; i < a.Length; i++)
{
var innerArray = a[i];
for (int f = 0; f < innerArray.Length; f++)
{
for (int j = 0; j < b.Length; j++)
{
if (b[j] == innerArray[f])
{
Count++;
}
}
}
}
答案 3 :(得分:1)
你也可以使用Linq表达式,我想它比循环
容易得多a.SelectMany(x => x).Count(x => b.Contains(x))
答案 4 :(得分:0)
您的数组a
实际上是一个包含2个元素的数组,一个元素长度为4个元素,另一个元素长度为3个元素。你的内部循环遍历每个b
元素的每个数组,所以当它到达b
的第5个元素时,b[4]
与a[0][4]
进行比较,它&# 39; s超出界限,因为a[0]
的最后一个元素是a[0][3]
,但你试图与a[0][4]
进行比较。另外,在您找到匹配项后,您真的想break
吗?
如果你想找到所有重复项,最简单的投注可能是@peyman,或者你可以使用评论者@zerkms,Enumerable.Intersect<TSource>
的想法,假设首先将a压平为1d。
int[] flattened = a.SelectMany(item => item).ToArray();
Count = b.Intersect(flattened).Count();
与:
相同b.Intersect(a.SelectMany(item => item).ToArray()).Count();