二维点列表的多个问题
Multiple problems with a 2D List of Points
我在使用 2D 点列表时遇到多个问题。这些点是一系列线的起点和起点。
首先,这段代码来自List的声明。它是更大的 class 的一部分,称为 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++)
我之前发布了一个问题,询问声明、实例化和引用匹配点列表的正确方法,但立即被否决。我查看了所有内容,但在 Whosebug 或我的任何手册中都没有发现这个问题。
如果你声明一个 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
数组。相反,我会将权重 a 属性 添加到 Line
结构。
我在使用 2D 点列表时遇到多个问题。这些点是一系列线的起点和起点。
首先,这段代码来自List的声明。它是更大的 class 的一部分,称为 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++)
我之前发布了一个问题,询问声明、实例化和引用匹配点列表的正确方法,但立即被否决。我查看了所有内容,但在 Whosebug 或我的任何手册中都没有发现这个问题。
如果你声明一个 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
数组。相反,我会将权重 a 属性 添加到 Line
结构。