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

时间:2015-08-07 16:53:10

标签: c#

我有一个二维数组即状态。我创建了一个一维数组,比如SubState。然后我改变了SubState。我想在States中找到新的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。 感谢。

3 个答案:

答案 0 :(得分:1)

您正在寻找SequenceEqual

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

如果您定义了LINQ FindIndex运算符,则可以使用以下方式更简洁地表达它:

int index = States.FindIndex(s => s.SequenceEqual(SubState));

答案 1 :(得分:0)

您可以在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结果以进行显式空检查。

答案 2 :(得分:0)

您可以使用Linq:

  var index = -1;

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

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