Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#如何将值与2D数组进行比较 int[]a=新的int[]{1,2,3,4}; int[]b=新的int[]{5,6,1,2,7,8}; 整数计数=0; for(int i=0;i_C#_Arrays - Fatal编程技术网

c#如何将值与2D数组进行比较 int[]a=新的int[]{1,2,3,4}; int[]b=新的int[]{5,6,1,2,7,8}; 整数计数=0; for(int i=0;i

c#如何将值与2D数组进行比较 int[]a=新的int[]{1,2,3,4}; int[]b=新的int[]{5,6,1,2,7,8}; 整数计数=0; for(int i=0;i,c#,arrays,C#,Arrays,上面是一个简单的程序,它可以搜索两个数组并在它们之间找到重复项。但是,我在将第一个数组设置为2D数组时遇到了困难,因为运行下面的代码时出现了一个错误“索引超出了数组的界限”。我真的不知道该怎么做,因此如果有任何帮助,我将不胜感激 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++) {

上面是一个简单的程序,它可以搜索两个数组并在它们之间找到重复项。但是,我在将第一个数组设置为2D数组时遇到了困难,因为运行下面的代码时出现了一个错误“索引超出了数组的界限”。我真的不知道该怎么做,因此如果有任何帮助,我将不胜感激

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();    
int[]]a={newint[]{1,2,3,4},newint[]{3,9,9};
int[]b=新的int[]{5,6,1,2,7,8};
整数计数=0;
for(int i=0;i
您的数组
a
实际上是一个包含2个元素的数组,一个元素长4个元素,另一个元素长3个元素。您的内部循环针对
b
的每个元素在这些数组中进行迭代,因此当它到达
b
的第五个元素时,
b[4]
a[0][4]
相比,它是超出范围的,因为
a[0]
的最后一个元素是
a[0][3]
,但您正在尝试与
a[0][4]进行比较
。另外,您真的想在找到匹配项后
中断

如果您想找到所有重复项,最简单的赌注可能是@peyman,或者您可以使用commenter@zerkms的想法,
Enumerable.Intersect
,假设先将a展平为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 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();
这与:

int[] flattened = a.SelectMany(item => item).ToArray();
Count = b.Intersect(flattened).Count();

数组
a
实际上是一个包含2个元素的数组,一个元素长4个元素,另一个元素长3个元素。您的内部循环针对
b
的每个元素在这些数组中进行迭代,因此当它到达
b
的第五个元素时,
b[4]
a[0][4]
相比,它是超出范围的,因为
a[0]
的最后一个元素是
a[0][3]
,但您正在尝试与
a[0][4]进行比较
。另外,您真的想在找到匹配项后
中断

如果您想找到所有重复项,最简单的赌注可能是@peyman,或者您可以使用commenter@zerkms的想法,
Enumerable.Intersect
,假设先将a展平为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 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();
这与:

int[] flattened = a.SelectMany(item => item).ToArray();
Count = b.Intersect(flattened).Count();
//在这里初始化东西
对于(inti=0;i
//在此处初始化内容

对于(int i=0;i我假设您希望在二维数组和一维数组之间找到重复项

//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 
=在a2和b之间找到2个重复项

编辑新规范

第二次编辑,用于存储每个二维阵列元素的副本

int Count = (from i in a from j in i from k in b where k == j select j).Count();
更新3: 对于所选的代码格式:

var duplicates = a.Select(i => (from j in i from k in b where k == j select j).Count()).ToList();
var duplicates=新列表();
对于(int h=0;h
添加了重复输出:

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
我假设您希望在二维数组和一维数组之间找到重复项

//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 
=在a2和b之间找到2个重复项

编辑新规范

第二次编辑,用于存储每个二维阵列元素的副本

int Count = (from i in a from j in i from k in b where k == j select j).Count();
更新3: 对于所选的代码格式:

var duplicates = a.Select(i => (from j in i from k in b where k == j select j).Count()).ToList();
var duplicates=新列表();
对于(int h=0;h
添加了重复输出:

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
您可以尝试使用foreach

     for (int d = 0; d < duplicates.Count; d++)
        {
            Console.WriteLine(duplicates[d]);
        }
或者用另一个来代替

            foreach (var val1 in a)
            {
                foreach (var val2 in val1)
                {
                    foreach (var val3 in b)
                    {
                        if (val3 == val2)
                        {
                            Count++;
                        }
                    }
                }
            }
for(int i=0;i
您可以尝试使用foreach

     for (int d = 0; d < duplicates.Count; d++)
        {
            Console.WriteLine(duplicates[d]);
        }
或者用另一个来代替

            foreach (var val1 in a)
            {
                foreach (var val2 in val1)
                {
                    foreach (var val3 in b)
                    {
                        if (val3 == val2)
                        {
                            Count++;
                        }
                    }
                }
            }
for(int i=0;i
您也可以使用Linq表达式,我想这比循环容易得多

        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++;
                    }
                }
            } 
        } 

您也可以使用Linq表达式,我想这比循环容易得多

        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++;
                    }
                }
            } 
        } 

a[i]
th数组长度是
a[i]。length
,而不是
b.length
。PS:我喜欢你的昵称。你的b有6个元素,j将是a