【问题标题】:Displaying int[] values in a List [closed]在列表中显示 int[] 值[关闭]
【发布时间】:2020-07-24 23:38:35
【问题描述】:

我正在创建一个 X/Y 坐标列表。

List<int[,]> coordinateList = new List<int[,]>();

然后我添加到列表中。

coordinateList.Add(new int[9, 15]);

最后我尝试打印列表中第一项的值(我刚刚添加的那个)。

System.Diagnostics.Debug.WriteLine(coordinateList[0].GetValue(0, 1));

我想要打印 (9, 15)。但它只打印 0。

【问题讨论】:

  • 请展示一个其他人可以在本地运行并观察相关行为的完整示例。
  • 这三行都是我在一个简单的 Windows 窗体中运行的。
  • 您正在创建一个 9x15 的二维数组,而不是将值设置为 9 和 15。该数组未初始化,这就是该数组的每个元素的值都为零的原因。

标签: c# arrays list


【解决方案1】:

new int[9, 15] 创建一个新的二维数组,一维有 9 个元素,另一维有 15 个元素,总共 135 个元素。 所有元素最初的值都是0,直到您明确分配新值之前,情况都会如此。

coordinateList[0].GetValue(0, 1)coordinateList 集合中检索第一个这样的数组,然后检索在第一个维度的索引为0 和第二个维度的索引为1 的位置找到的元素值。在常规的数组索引表示法中,这相当于coordinateList[0][0, 1]。该元素的值,就像数组中所有其他元素的值一样,是0。当您认为您正在打印出坐标时,您会看到什么。

换句话说,您的代码绝对不是 “创建 X/Y 坐标列表”。您似乎以某种方式将数组表示法与其他内容混淆了。

很难知道怎样才能最好地让您重回正轨。你离实际工作的效果还很远,你可能需要更多地学习该语言才能真正理解如何制作坐标列表。但是,我将提供这个相对简单的示例:

struct Point
{
    public int X { get; }
    public int Y { get; }

    public Point(int x, int y)
    {
        X = x;
        Y = y;
    }
}

这是一个简单的数据结构,它将存储一对整数,即您的 X 和 Y 坐标。您可以像这样将这种结构的一个实例添加到您的列表中:

List<Point> coordinateList = new List<Point>();

coordinateList.Add(new Point(9, 15));

然后您可以像这样打印出这些值:

Point point = coordinateList[0];

System.Diagnostics.Debug.WriteLine($"X: {point.X}, Y: {point.Y}");

【讨论】:

    【解决方案2】:

    您在这里使用了完全错误的类型。 int[,] 是一个二维整数数组,即一个矩阵,而不是一对整数。 List&lt;int[,]&gt; 将是一个矩阵列表。 new int[9,15] 创建一个 9x15 矩阵。 GetValue(0, 1) 获取矩阵中索引[0, 1] 处的值。

    有很多方法可以表示 XY 坐标。您可以创建自己的结构 like Peter Duniho has shown in their answer,这是推荐的,或者使用 C# 7+ 的元组:

    List<(int x, int y)> coordinateList = new List<(int x, int y)>();
    
    ...
    
    coordinateList.Add((9, 15));
    System.Diagnostics.Debug.WriteLine(coordinateList[0]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-27
      • 1970-01-01
      相关资源
      最近更新 更多