c# - 在C#中创建二维数组的数组

标签 c# arrays multidimensional-array initialization initializer

我只是想创建一个二维数组的数组来存储坐标点。

所以我想要一个数组,其中每个索引返回一个二维数组,我将其用作 xy

这是我尝试过的:

waypoints = new int[4][,]    {
        {{0},{6, 0}},
        {{1},{1, 1}},
        {{2},{1, 5}},
        {{3},{6, 5}}
    };

我意识到这可能看起来很愚蠢,但我已经尝试在 Google 上查找它,但没有得到任何好的结果。

报错:

"error CS0623: Array initializers can only be used in a variable or field initializer. Try using a new expression instead "

我也试过这样做:

waypoints = new int[4][,] {
        new int[,] {6, 0},
        new int[,] {1, 1},
        new int[,] {1, 5},
        new int[,] {6, 5}
        };

这给出了一个错误:

"error CS0846: A nested array initializer was expected"

最佳答案

在初始声明中需要一个大括号集 {}:

var waypoints = new int[4][,]   {
    new int[,] {{6}, {0}},
    new int[,] {{1}, {1}},
    new int[,] {{1}, {5}},
    new int[,] {{6}, {5}}
};

这是因为对于这样的二维数组,数组中的每个元素都被视为用于初始化的数组(尽管它通常用于数组的每个元素,例如 val[0,0] = 4; )。

编辑(根据评论反馈):

int[][](称为交错数组,即:数组成员可以是different size的数组数组)对比,int[,] 是一个带有 fixed dimension 的二维数组.两者都是存储数组的数组,因此数组的每个元素都是一个数组。这就解释了为什么需要在上面的初始化中放置另一个大括号。

这样的二维数组,当初始化不同时,会产生不同的维度(因此有多种初始化方法):

int[,] val = new int[,] { { 6 }, { 0 } }; //resulting in int[2,1]
int[,] val = new int[,] { { 6, 0 } }; //resulting in int[1,2]

无论哪种方式,都需要额外的一组大括号

关于交错数组和多维固定大小数组之间的区别,therealready plenty good explanations/benchmarking available online来自知名人士。而且我知道,除了 OP 的兴趣之外,我提供更多有关它的信息并不重要。 (因此,此答案的范围最初仅用于回答失败的初始化)。

据了解,该解决方案不适用于存储坐标点(如 OP 所做的那样)。上面的解释是为了解释为什么他的初始化不起作用,而不是提供存储坐标点的最佳方案。至于存储坐标点,PointSystem.Drawing struct 中会更合适(如评论中所建议)。

使用二维数组表示二维中的单点Cartesian coordinate这是一种“矫枉过正”,因为一维数组已经能够存储计算机允许的尽可能多的数字,远远超过在笛卡尔坐标系中存储点所需的两个数字。

关于c# - 在C#中创建二维数组的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34851509/

相关文章:

java - 二维数组中的联合查找 (Java)

javascript - 我如何获取一个对象数组并减少它,以便组合重复对象键的数据?

algorithm - 如何在 d 维球/球体内生成均匀的随机点?

algorithm - 高效查询持有多维数据的 B+ 树

c# - 如何判断匿名类型的对象是否为空?

javascript - 为什么对象键的第一个值被视为字符串 - AngularJs

c# - 如果我想实现这个线程概念,我应该如何使用 TPL?

c - 对二维数组函数参数使用限制关键字的语法是什么?

c# - 在另一个类中运行循环时更新View?

c# - 高度可扩展的分布式系统的应用程序/自定义性能计数器日志记录?