C# 如何在C中的二维数组中找到一维数组#

C# 如何在C中的二维数组中找到一维数组#,c#,C#,我有一个二维数组,即状态。我创建一个一维数组,比如SubState。然后我改变状态。我想在状态中找到新的子状态并获取索引。例如: int[][] States = new int[3][] { new int[] { 3, 3, 4 }, new int[] { 2, 5, 1 }, new int[] { 2, 3, 4 } }; int[] SubState = new int[States[0].Length]; States[0].CopyTo(SubState, 0); SubStat

我有一个二维数组,即状态。我创建一个一维数组,比如SubState。然后我改变状态。我想在状态中找到新的子状态并获取索引。例如:

int[][] States = new int[3][] { new int[] { 3, 3, 4 }, new int[] { 2, 5, 1 }, new int[] { 2, 3, 4 } };
int[] SubState = new int[States[0].Length];
States[0].CopyTo(SubState, 0);
SubState[0] -= 1;
我想找到State中新SubState的索引,在本例中为2。
谢谢。

您正在寻找
SequenceEqual

int index = -1;
for (int i = 0; i < States.Length; i++)
    if (States[i].SequenceEqual(SubState))
    {
        index = i;
        break;
    }

您可以在LINQ查询中使用
SequenceEqual
方法,如下所示:

var nextStateIndex = States
    .Select((a, i) => new {Index = i, Array = a})
    .FirstOrDefault(p => p.Array.SequenceEqual(SubState))
    ?.Index;
if (nextStateIndex.HasValue) {
    ...
}
注意:此代码使用新的
?。
运算符。如果您针对的是不支持此运算符的C#版本,请存储
FirstOrDefault
结果以进行显式空检查。

您可以使用Linq:

  var index = -1;

  var foundSubState = States.FirstOrDefault(x => {
    index++;
    return x.SequenceEqual(SubState);
  });

  var res = foundSubState != default(Array) ? index : -1;

你想解决的问题是什么?你的问题没有多大意义,而且这种方法似乎不太灵活或不可维护。仅供参考,这不是一个二维数组,这是一个锯齿状数组。二维数组将被定义为
int[3,3]
。我有一个包含一些一维数组的二维数组。其中一些数组在一个元素中彼此不同。例如,[3,3,4]与[2,3,4]&[3,2,4]&[3,3,3]在一个元素中相差1。我想在主二维数组中找到这三个数组的索引。非常感谢。作为初学者,我犯了很多错误:)。非常感谢。这真的很有帮助。如果您能告诉我如何定义LINQ FindIndex运算符,我将不胜感激。谢谢。@M.Mohebbi:您可以从链接的答案中复制实现:
  var index = -1;

  var foundSubState = States.FirstOrDefault(x => {
    index++;
    return x.SequenceEqual(SubState);
  });

  var res = foundSubState != default(Array) ? index : -1;