如何在 C# 中反转逻辑交错数组的值?

How to invert the values of a logical jagged array in c#?

下午好,我有一个包含真值和假值(或 0 和 1)的 C# 锯齿状数组,我想反转这些值,例如:

1 1 1 1
0 1 1 0
1 1 1 1
1 0 0 1

成为:

0 0 0 0
1 0 0 1
0 0 0 0
0 1 1 0

有没有不循环的简单方法?像 !myJaggedArray??

没有内置函数,但可以使用 LINQ。

int[][] input = new[]
{
  new[] { 1, 1, 1, 1 },
  new[] { 0, 1, 1, 0 },
  new[] { 1, 1, 1, 1 },
  new[] { 1, 0, 0, 1 }
};
int[][] output = input.Select(row => row.Select(value => value == 1 ? 0 : 1).ToArray()).ToArray();

对于逻辑值:

bool[][] input = new[]
{
  new[] { true,  true,  true,  true },
  new[] { false, true,  true,  false },
  new[] { true,  true,  true,  true },
  new[] { true,  false, false, true }
};
bool[][] output = input.Select(row => row.Select(value => !value).ToArray()).ToArray();

没有用于反转数组的内置操作,但您可以使用 LINQ 进行反转而无需显式循环:

var res = myJaggedArray.Select(a => a.Select(n => 1-n).ToArray()).ToArray();

1-n 技巧是在不使用条件执行的情况下用 1 替换 0,用 0 替换 1 的常用方法。