Многочисленные проблемы с 2D списком баллов - PullRequest
0 голосов
/ 28 апреля 2019

У меня несколько проблем с 2D-списком очков.Точки - это точки «Кому» и «Из» ряда линий.

Во-первых, этот фрагмент кода взят из объявления Списка.Он является частью более крупного класса с именем 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, ни в каком-либо из моих руководств.

1 Ответ

2 голосов
/ 28 апреля 2019

Было бы проще, если бы вы объявили Line struct:

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.

...