我只想创建一个二维数组数组来存储坐标点。
所以我想要一个数组,其中每个索引返回一个二维数组,我将其用作x
和y
。
这是我尝试过的:
waypoints = new int[4][,] {
{{0},{6, 0}},
{{1},{1, 1}},
{{2},{1, 5}},
{{3},{6, 5}}
};
我意识到这可能看起来很愚蠢,但我已经尝试在谷歌上查找,而且我没有取得任何好成绩。
它出错了:
“错误CS0623:数组初始值设定项只能用于变量或 字段初始化程序。请尝试使用新表达式“
我也试过这样做:
waypoints = new int[4][,] {
new int[,] {6, 0},
new int[,] {1, 1},
new int[,] {1, 5},
new int[,] {6, 5}
};
这会出错:
“错误CS0846:预期嵌套数组初始值设定项”
答案 0 :(得分:12)
对此有一个简单的答案。使用“System.Drawing.Point”类的实例。创建一个“Point”数组来存储坐标。要创建数组:
Point[] points = new Point[4];
要为数组赋值(例如,在位置0),请使用以下代码。
points[0] = new Point(xvalue,yvalue);//Where "xvalue" and "yvalue" are integer variables.
从点类的实例中获取X和Y值。使用以下代码。
int xvalue = points[0].X;
int yvalue = points[0].Y;
P.S。您可以使用这些点为控件分配位置,但这是另一个故事^ _ ^
答案 1 :(得分:11)
初始声明中还需要一个大括号集{}
:
var waypoints = new int[4][,] {
new int[,] {{6}, {0}},
new int[,] {{1}, {1}},
new int[,] {{1}, {5}},
new int[,] {{6}, {5}}
};
这是因为对于2D数组,数组中的每个元素都被视为初始化的数组(虽然它通常用于数组的每个元素,如val[0,0] = 4;
)。
修改(在评论反馈后):
与int[][]
(称为jagged array
形成对比,即:数组成员可以为different size的数组数组),int[,]
是一个2D数组fixed dimension。两者都是存储数组的数组,因此数组的每个元素都是一个数组。这解释了为什么需要在其初始化中添加另一个大括号,如上所述。
这样的2D数组在初始化时会产生不同的维度(因此有多种方法可以初始化它):
int[,] val = new int[,] { { 6 }, { 0 } }; //resulting in int[2,1]
int[,] val = new int[,] { { 6, 0 } }; //resulting in int[1,2]
无论哪种方式,都需要额外的花括号。
对于jagged array
和多维,固定大小的数组之间的差异,there为already plenty good explanations/benchmarking {{3}来自知名消息来源的available。我明白,除了OP的兴趣之外,对我来说,提供更多信息并不重要。 (因此,这个答案的范围最初只是为了回答失败的初始化)。
可以理解,该解决方案不是最好用于存储坐标点(由OP完成)。上面的解释是为了解释为什么他的初始化不起作用,而不是为存储坐标点提供最佳解决方案。至于存储坐标点,System.Drawing
struct
中的online会更合适(如评论中所示)。
使用2D数组来表示2D Point中的单点是一种过度杀伤",因为一维数组已经能够存储与计算机允许的数量一样多的数字,远远超过在笛卡尔坐标系中存储点所需的两个数字。
答案 2 :(得分:2)
数组是二维的,大小未知,初始化程序可以定义各种大小的数组:
var waypoints = new int[4][,] {
new int[,] { {1, 2, 6}, {3, 4, 5} }, // two rows, 3 columns
new int[,] { {1, 1}, {1, 2} } , // 2 x 2
new int[,] { {1, 5} }, // 1 x 2
new int[,] { {6, 5} }
};
答案 3 :(得分:0)
我可能会误解这个问题,但是您在数组中的维数是否过高?这与那些建议使用Point或Vector类的人具有相同的观点。如果每个数组仅存储一个点(可能不是,我可能只是假设那样),则不需要3维。您可以有一个规则数组的数组,并使用索引0表示x坐标,使用索引1表示y坐标。
在我看来,您正在创建一个完整的第3维,其中每个数组的大小均为1,将其可视化为2d数组要容易得多。虽然看起来好像您将数组用作一种键值对,但索引本身可以用作键吗?它们似乎每次都在增加。