繁体   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