簡體   English   中英

在 C# 中的非鋸齒狀二維字節數組中查找元素

[英]Looking for an element in a non-Jagged 2D Byte array in C#

我創建了一個具有3 行和列(順序 3*3 矩陣)的2D 字節數組它不是鋸齒狀數組

var arr = new byte[3,3];

但是現在我必須知道數組中是否存在特定元素。 我嘗試了很多方法,但它們適用於一維數組或鋸齒狀數組。 你能想出一種在整個二維數組中搜索特定元素的方法嗎?

有幾種方法:

  • 傳統的嵌套foreach,每個維度一個
  • 簡單的foreach,arrays是可枚舉的
  • Linq

嵌套的 foreach

byte valueToFind = ...
byte[,] values = new byte[3,3];
var xLength = items.GetLength(0);
var yLength = items.GetLength(1);

bool valueFound = false;
int x = 0;
while (!valueFound && x < xLength)
{
for (int x=0; x<xLength; ++x)
{
    int y = 0;
    while (!valueFound && y < yLength)
    {
        valueFound = values[x, y] == valueToFind;
        ++y;
    }
    ++x;
}
return valueFound;

請注意,索引比實際找到的元素的索引多一:

if (valueFount)
{
    xIndex = --x;
    yIndex = --y;
}

簡單的 foreach

每個數組都是可枚舉的。 如果您對元素的索引不感興趣:

foreach (var value in values)
{
    valueFound = value == valueToFind;
    if (valueFound) break;
}

LINQ

最短的方法:使用LINQ:

using System.Linq;
bool valueFound = values.Any(value => value == valueToFind)

這是做什么的:獲取可枚舉的值序列並從第一個值開始枚舉。 檢查每個值是否等於 valueToFind。 找到后立即停止。 如果找到值,則返回值為真。

暫無
暫無

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

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