Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.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# 二维数组逐元素比较的最快方法_C#_Multidimensional Array - Fatal编程技术网

C# 二维数组逐元素比较的最快方法

C# 二维数组逐元素比较的最快方法,c#,multidimensional-array,C#,Multidimensional Array,我有一个二维数组 int[,]b={{1,0,1,1},{1,1,0,1},{0,0,1} 我想逐个元素检查数组中的条件,如果数组索引的前一个值不同于数组的当前值,则我的一个计数器将递增。整个数组的返回类型也是1D数组。 在这里,行表示我的通道,列表示采样值的数量 我可以通过两个循环来完成这项工作,并对元素逐个进行比较,就像我在delphi7中所做的一样,但现在我正在研究C#。那么,有没有什么聪明、快捷的方法可以做到这一点呢?请告诉我 以上数组的输出为 int[]output={2}as1->0

我有一个二维数组
int[,]b={{1,0,1,1},{1,1,0,1},{0,0,1}

我想逐个元素检查数组中的条件,如果数组索引的前一个值不同于数组的当前值,则我的一个计数器将递增。整个数组的返回类型也是1D数组。 在这里,行表示我的通道,列表示采样值的数量

我可以通过两个循环来完成这项工作,并对元素逐个进行比较,就像我在delphi7中所做的一样,但现在我正在研究C#。那么,有没有什么聪明、快捷的方法可以做到这一点呢?请告诉我

以上数组的输出为
int[]output={2}
as
1->0
so再次递增
0->1
,然后再次递增,然后是一个相同的状态,所以没有增量,所以总值是
2


所有其他元素都是一样的,所以输出将是
[2,2,1]

我想可以用Linq完成

int[,] b = { { 1, 0, 1, 1 }, { 1, 1, 0, 1 }, { 0, 0, 0, 1 } };

var result = Enumerable.Range(0, b.GetLength(0))
        .Select(row => Enumerable.Range(0, b.GetLength(1)-1).Count(col => b[row, col + 1] != b[row, col])).ToArray();
其中:

b.GetLength(0)
-获取数组中的行数

b.GetLength(1)
-获取数组中的列数


Count(y=>b[row,col+1]!=b[row,col])
-只对不同的项目进行计数

您可以解释x和y的值是多少,因为根据linq,x应该具有数组b的行长度,y应该具有数组的列长度。但根据代码,似乎有所不同。我已经编辑了上面的代码x'是处理行编号,“y”是处理列编号。我已将其更改为行和列。这是因为行来自
Enumerable.Range(0,b.GetLength(0))
即数组中的行数范围0到行数。柱的情况也类似。当我比较下一个项目时,范围是少1个项目。