簡體   English   中英

如何在C#中的二維數組中找到一維數組

[英]How to find a one dimensional array in a two dimensional array in C#

我有一個二維數組,即狀態。 我創建一個一維數組,例如SubState。 然后,我更改SubState。 我想在州中找到新的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 FindIndex運算符,則可以使用以下命令更簡潔地​​表達它:

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

您可以在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結果以進行顯式的null檢查。

您可以使用Linq:

  var index = -1;

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM