【问题标题】:Multiple problems with a 2D List of Points二维点列表的多个问题
【发布时间】:2019-04-28 19:57:27
【问题描述】:

我在使用 2D 点列表时遇到了多个问题。点是一系列线的终点和起点。

首先,这段代码 sn-p 来自 List 的声明。它是称为 TacLineStruct 的更大类的一部分:

// The actual MST Spine
public List <Point> [,] MSTSpine 
{
    get;
    set;
}

public TacLineStruct(int arrayLength)
{
    GroupID = new int[arrayLength];
    this.EdgeList = new int[(arrayLength * arrayLength), 2];
    EdgeWeight = new float[arrayLength * arrayLength];
    GroupCenter = new Point[arrayLength];
    this.MSTSpine = new List<Point>[arrayLength,2];
}

接下来,这些赋值会导致运行时错误:

Point tPoint1 = new Point((int)Army[TLS.EdgeList[i, 0]].Location.X, (int)Army[TLS.EdgeList[i, 0]].Location.Y);
Point tPoint2 = new Point((int)Army[TLS.EdgeList[i, 1]].Location.X, (int)Army[TLS.EdgeList[i, 1]].Location.Y);

TLS.MSTSpine[i,0].Add(tPoint1);
TLS.MSTSpine[i,1].Add(tPoint2);

最后,如何找到列表的计数?这不起作用:

for(int i = 0; i < TLS.MSTSpine[0,0].Count(); i++) 

我之前发布了一个问题,询问声明、实例化和引用匹配点列表的正确方法,但立即遭到否决。我已经查看了所有内容,但在 StackOverflow 或我的任何手册中都没有发现这个问题。

【问题讨论】:

  • 您没有二维点列表。您有一个由 1D 点列表组成的 2D 数组。没有像二维列表这样的东西。你能解释一下你心中的结构吗?你需要一个行列表吗? T[,]T 的二维数组。在您的情况下,TList&lt;Point&gt;。我会创建一个Line 结构。
  • 是的,带有起点和终点的行列表。

标签: c# list instantiation points


【解决方案1】:

如果你声明一个 Line 结构,事情会更容易:

public struct Line
{
    public Line(Point start, Point end)
    {
        Start = start;
        End = end;
    }

    public Point Start { get; }
    public Point End { get; }

    public override string ToString()
    {
        return String.Format($"({Start.X}, {Start.Y}) - ({End.X}, {End.Y})");
    }
}

现在行列表可以声明为

public List<Line> MSTSpine { get; } = new List<Line>();

并像这样使用

var p1 = new Point(1, 2);
var p2 = new Point(3, 4);
var line = new Line(p1, p2);
MSTSpine.Add(line);

Console.WriteLine(MSTSpine[0].Start.X);

Console.WriteLine(MSTSpine[0]); // Prints:  (1, 2) - (3, 4)

我看到您还声明了一个EdgeWeight 数组。相反,我会将权重添加到 Line 结构中。

【讨论】:

  • 非常感谢您提供的这个非常聪明的解决方案。我从来没有想过要创建一个 Line 结构。谢谢!谢谢!谢谢!
猜你喜欢
  • 2020-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-18
  • 2020-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多