Ich habe eine Liste von Punkten, die eine Ebene bilden. Ich möchte Kanten zwischen aufeinanderfolgenden Punkten erstellen und sie zu einer anderen Liste hinzufügen. HierWie durchläuft man eine Liste, so dass der letzte Iterationsschritt zum ersten Objekt zurückkehrt?
ist der Code, den ich derzeit haben:
// Get points forming the plate
ArrayList points = part.points;
// Number of points forming the plate
int pointCount = points.Count;
// Create edges
List<LineSegment> edges = new List<LineSegment>();
for (int i = 0; i < pointCount - 1; i++)
{
// Get start and end points
Point start = points[i];
Point end = points[i+1];
// Create edge
LineSegment edge = new LineSegment(start, end);
// Add edge to the list
edges.Add(edge);
}
Es ist nicht ganz funktioniert, weil es nicht schaffen die letzte Kante zwischen dem letzten und die ersten Punkte auf der Liste. Wie könnte man das korrigieren?
for (int i = 0; i < pointCount; i++)
{
// Get start and end points
Point start = points[i] as Point;
Point end;
if (i == pointCount-1) end = points[0] as Point;
else end = points[i+1] as Point;
// Rest of the code here
}
Aber ich bin sicher, es ist ein eleganter Weg, es zu tun: Ich konnte es mit einer if-Anweisung wie dies funktioniert. In Python würde ich die Schleife von -1 starten, so dass die erste Kante tatsächlich den letzten Punkt mit dem ersten verbinden würde, aber das ist in C# nicht möglich.
EDIT: Die Liste der Punkte wird von der API als ArrayList angegeben.
Abgesehen von Frage, verwenden Sie 'List' anstelle von 'ArrayList'. Dadurch erhalten Sie eine typisierte Sammlung. –
Habib
Warum nicht die Schleife so wie sie ist und den letzten Schritt außerhalb der Schleife machen? Sollte immer der gleiche Befehl sein, Verknüpfung zwischen Punkten [0] und Punkten [Punkte.Länge-1]. –
Nicht wirklich sicher über den Downvote, das sieht wie eine gute Frage aus – Habib