我能把一个对象列表转换成一个二维数组吗?

3

我不确定在C#中是否可以实现,但如果可以的话那就太好了。我有一个对象列表,使用以下代码将其转换为数组非常容易:

object [] myArray = wrd.ToArray();

它的运行很好,但是如何将对象列表转换为二维数组呢?其中来自列表索引0到20的元素将位于二维数组的第一行。列表索引21到41中的元素应在二维数组的第二行。列表索引42到62中的元素应在二维数组的第三行等等。换句话说,每行应有20个元素,共有21行和21列。例如,在图像labyrint中,字符'B'应该在索引[1,0]处被找到。
但我不知道是否可能,但希望一些非常有技能的人可以帮助我。

3
首先,每行你想要多少个元素?你说20,但立即又否认自己,说每行应该有21列。到底是哪一个?其次,Stackoverflow不是一个免费的代码编写服务。给我们展示你尝试过什么样的示例以及你遇到了什么问题。 - Frauke
感谢您的回复@Frauke Nonnenmacher,但数组索引从0开始而不是1。因此,如果您查看图像,则会注意到每行有21个字符,但当您将它们放入零索引数组中时,它将成为20个元素。这就是为什么我写了20个元素。我的问题如我在帖子中所述。我想将我的对象列表转换为二维数组。 - cop77
1个回答

0
你可以遍历数组并将项目放入2D数组中。
// Pseudo code...
x = 0
y = 0
loop while i < originalArray.Length

    2dArray[x,y] = originalArray[i]
    i++
    y++

    if y >= 2dArrayRowLength
        x++
        y=0

end loop

但是,真的有必要吗?在C#中使用2D数组实际上并不会改变数据存储方式,它们只是一种访问单维数组的语法糖。只需在访问单维数组时即时计算x和y偏移量即可。

类似于以下代码:

object[] data = new object[100];

int xLength = 21;
int yLength = 21;
for (int x = 0; x < xLength; x++)
{
    for (int y = 0; y < yLength; y++)
    {
        var theValue = data[(yLength * x) + y];
        Console.Write(theValue);
    }

    Console.WriteLine();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接