2D元素元素比较的最快方法

时间:2017-06-28 09:15:14

标签: c# multidimensional-array

我有一个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]

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])) - 仅计算不同的项目