簡體   English   中英

C#-訪問多維數組的一個切片

[英]C# - Access a one slice of a multi-dimensional array

假設有一個MxNx3矩陣

byte [,,] myMatrix= new byte[sizeRow, sizeCol, 3];

如何訪問單個頻段(用於讀寫目的)? 就像是:

singleBand = myMatrix[:allRows: , :allCols: , :desiredBand:];

左邊是我所擁有的,右邊是我要訪問的(例如。)

左邊是我所擁有的,右邊是我要訪問的(例如)。

int M=10;
int N=20;
var test = new byte[3][,] { new byte[N,M],new byte[N,M],new byte[N,M]};
var band1 = test[1]; //its green
band1[2, 2] = 99;

如果您無法更改myMatrix的類型,則可以使用以下代碼:

byte [,,] myMatrix= new byte[sizeRow, sizeCol, 3];
var singleBand = new byte[sizeRow, sizeCol];
var band = 1;

for (var i = 0; i < sizeRow; i++) {
    for (var j = 0; j < sizeCol; j++) {
        singleBand[i, j] = myMatrix[i, j, band];
    }
}

但是,如果您可以更改它,那么Zeromus的解決方案可能會更好,因為您可以更輕松地操縱樂隊。

您只需要遍歷所需的數組元素並提取所需的“ band”即可。

// Create a three-dimensional array.
int[, ,] threeDimensional = new int[3, 3, 3];

// Set the first "Band" to 9

threeDimensional[0,0,1] = 9;
threeDimensional[1,0,1] = 9;
threeDimensional[2,0,1] = 9;

threeDimensional[0,1,1] = 9;
threeDimensional[1,1,1] = 9;
threeDimensional[2,1,1] = 9;

threeDimensional[0,2,1] = 9;
threeDimensional[1,2,1] = 9;
threeDimensional[2,2,1] = 9;

// Loop over each dimension's length.
for (int i = 0; i < threeDimensional.GetLength(2); i++)
{
    for (int y = 0; y < threeDimensional.GetLength(1); y++)
    {
        for (int x = 0; x < threeDimensional.GetLength(0); x++)
        {
            Console.Write(threeDimensional[x, y, i]);
        }
        Console.WriteLine();
    }
    Console.WriteLine();
}

您唯一的選擇是一次訪問一個頻段中的每個“單元”,並將其提取到其他位置。 就我而言,我只是將它們展示出來。

暫無
暫無

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

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