【问题标题】: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()][];

错误是无效的等级或说明符,

【问题讨论】:

标签: c# c#-4.0 collections logic


【解决方案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:stackoverflow.com/questions/15730346/…。或者,如果您不太关心性能,您可能会切换到使用字典而不是支持否定键的数组。
  • 也许我应该使用点字典,你觉得呢?
  • 也许,是的。但是“正确”的解决方案取决于您在这里尝试解决的总体问题,我不知道。
猜你喜欢
  • 1970-01-01
  • 2020-05-07
  • 1970-01-01
  • 2015-07-13
  • 1970-01-01
  • 2019-03-15
  • 2014-05-29
  • 2013-12-05
  • 2016-08-10
相关资源
最近更新 更多