C# 如何从许多较小的二维阵列中构建一个较大的二维阵列

C# 如何从许多较小的二维阵列中构建一个较大的二维阵列,c#,C#,我正努力朝着一个目标努力 512 x 512 (262144 elements) 我现在有一个 List<double[,]> data; 我正在研究的2d阵列是方形的 List<List<float>> newList = new List<List<float>(); //working towards List newList=newList我相信你可以用以下方法做到这一点 var newList = new List<Li

我正努力朝着一个目标努力

512 x 512 (262144 elements)
我现在有一个

List<double[,]> data;
我正在研究的2d阵列是方形的

List<List<float>> newList = new List<List<float>(); //working towards

List newList=newList我相信你可以用以下方法做到这一点

var newList = new List<List<float>>();

for (int i = 0; i < 512; i++)
{
    var innerList = new List<float>();
    for (int j = 0; j < 512; j++)
    {
        int x =(i/8)*64 + (j/8);
        int y = i % 8;
        int z = j % 8;
        innerList.Add(data[x][y,z]);
    }

    newList.Add(innerList);
}
var newList=newList();
对于(int i=0;i<512;i++)
{
var innerList=新列表();
对于(int j=0;j<512;j++)
{
int x=(i/8)*64+(j/8);
int y=i%8;
intz=j%8;
添加(数据[x][y,z]);
}
添加(innerList);
}

基本上,您有64x64个8x8块。因此,较大的512x512结构的(i,j)坐标按以下方式转换。首先,要确定8x8块,您必须通过将i和j除以块的大小(8)来计算64x64块结构的行和列,然后将行(i/8)乘以行(64)中的块数并添加列(j/8)。对于y和z,它更简单,因为你知道它只是i和j的余数除以8(i%8)和(j%8)的问题。

你真的应该认为这是将3个坐标映射到2个坐标。3是列表中数组的索引,2是这些数组上的索引。映射到的2是外部列表和内部列表的索引。那么,你能定义一下在你的列表中你想把数据[5][2,3]
放在哪里吗?数据[5][2,3]应该在第三行的第8*5=40+3+1=44个元素中,除非我犯了一个数学错误。
for (int i = 0; i < Math.Sqrt(data.Count); i++ ) {
    List<float> row = new List<float>();
    foreach (double[,] block in data) {
        for (int j = 0; j < 8; j++) {
            row.Add(block[i,j]); //i clearly out of range
        }
    }
    newList.Add(row);
}
var newList = new List<List<float>>();

for (int i = 0; i < 512; i++)
{
    var innerList = new List<float>();
    for (int j = 0; j < 512; j++)
    {
        int x =(i/8)*64 + (j/8);
        int y = i % 8;
        int z = j % 8;
        innerList.Add(data[x][y,z]);
    }

    newList.Add(innerList);
}