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}
as1->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个项目。