【问题标题】:Can I convert a list with objects into a two dimensional array我可以将带有对象的列表转换为二维数组吗
【发布时间】:2017-09-03 17:34:55
【问题描述】:

我不知道这在 c# 中是否可行,但如果可以,那就太好了。我有一个对象列表,很容易使用以下代码将其转换为数组:

object [] myArray = wrd.ToArray();

它工作正常,但是如何将包含对象的列表转换为二维数组,其中列表中索引 0 到 20 的元素将位于二维数组的第一行。列表中从索引 21 到 41 的元素应位于二维数组的第二行。列表中从索引 42 到 62 的元素应位于二维数组的第三行等。换句话说,每行应有 20 个元素,并且有 21 行和 21 列。 Forinstens 在图像labyrint 中,则应在索引 [1,0] 处到达字符“B”

但是我不知道这是否可能,但希望一些非常熟练的人可以帮助我。

【问题讨论】:

  • 首先,每行需要多少个元素?你说 20,然后立即反驳说每行应该有 21 列。它是哪一个?其次,Stackoverflow 不是免费的代码编写服务。向我们展示您尝试过的方法以及遇到问题的地方。
  • 感谢您的回复@Frauke Nonnenmacher,但数组索引从 0 而不是 1 开始。因此,如果您查看图像,您会注意到每行有 21 个字符,但是当您放置将它们放入一个零索引数组中,它将是 20 个元素。这就是为什么我写了 20 个元素。我的问题如我的帖子中所述。我想将带有对象的列表转换为二维数组。

标签: c# list object multidimensional-array type-conversion


【解决方案1】:

您可以循环遍历数组并将项目放入 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# 中的二维数组实际上并没有改变数据的存储方式,它们只是以稍微不同的方式访问一维数组的语法糖。只需在访问一维数组时即时计算 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();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-10
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多