尝试用二维数组构建地图[重复]
Posted
技术标签:
【中文标题】尝试用二维数组构建地图[重复]【英文标题】:Trying to construct a map with 2-D arrays [duplicate] 【发布时间】:2017-11-20 08:52:11 【问题描述】:我正在尝试使用 C# 为 x 轴和 y 轴构建坐标为 -20 到 20 的地图。目前我已经定义了我的范围(如下所示),并且我正在使用 for each 循环遍历两个列表,但是我无法用任何内容填充它们,因为当我尝试重新分配数组值时它会引发错误。我想画一张带点的地图。我的逻辑错了吗?
IEnumerable<int> squares = Enumerable.Range(-20, 20);
IEnumerable<int> cirles = Enumerable.Range(-20, 20);
int [][] arrays = new int[squares.Count()][cirles.Count()];
foreach (var shape in squares)
foreach (var sha in cirles)
\\Construct map
程序抛出一个类型错误,因为它要我打印出一个锯齿状数组来定义它,像这样 int [][] arrays = new int[squares.Count()][];
错误是无效的等级或说明符,
【问题讨论】:
你究竟困在哪里? 我建议先阅读这篇文章:***.com/questions/12567329/multidimensional-array-vs 所以你“不能填充它们”。为什么?您收到错误消息?在您的问题中包含该消息。 【参考方案1】:正如 cmets 中所述,您可能在这里尝试使用错误类型的数组。看起来你最好只使用二维数组,因为你的尺寸是固定的:
int[,] array = new int[squares.Count(), circles.Count()];
如果您想坚持使用锯齿状数组,请确保您首先了解这一点:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/arrays/jagged-arrays。
锯齿状数组无法按照您尝试的方式进行初始化。我想这样做的原因是它不会有很大的意义。锯齿状数组允许您为每个包含的数组拥有不同的维度(您不需要)。
不过,如果您想使用锯齿状数组,请改用以下代码进行初始化:
int[][] arrays = new int[squares.Count()][];
for (int i = 0; i < arrays.Length; i++)
arrays[i] = new int[circles.Count()];
【讨论】:
这实际上非常接近于回答我遇到的问题是我想保留我的原始坐标 (-20,20),以便我可以使用它们来测量从自定义点类到点的距离。 如果你想要一个带有负索引的数组......那是不可能的。但是,您可以切换到自定义类而不是原始 int:***.com/questions/15730346/…。或者,如果您不太关心性能,您可能会切换到使用字典而不是支持否定键的数组。 也许我应该使用点字典,你觉得呢? 也许,是的。但是“正确”的解决方案取决于您在这里尝试解决的总体问题,我不知道。以上是关于尝试用二维数组构建地图[重复]的主要内容,如果未能解决你的问题,请参考以下文章