我有一个2D数组
int[,] b = { { 1, 0, 1, 1 }, { 1, 1, 0, 1 }, { 0, 0, 0, 1 } };
我想逐个元素检查元素中的条件,如果数组索引的前一个值与数组的当前值不同,那么我的一个计数器会增加。整个数组的返回类型也是一维数组。 这里的行表示我的通道,列表示样本值的数量。
我可以通过2个循环完成它并逐个元素进行比较,因为我已经在delphi7中做了同样的事情,但现在我正在使用C#。那么有没有任何聪明且最快速的方法来做同样的事情请告诉你。
上面数组的输出是
int [] output = {2}
为1->0
,因此再次递增0->1
然后再增加一个相同的状态,因此没有增量,因此总值为2
。
所有其他元素都相同,因此输出为[2,2,1]
答案 0 :(得分:3)
我猜可以用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]))
- 仅计算不同的项目