2 つのポイント (実際には PointID) で定義された単純な「脚」クラスがあるとします。
public class Leg
{
public int p1Id;
public int p2Id;
}
脚のリストは「相互接続」されており、一方の脚の pt2 は別の脚の pt1 と同じです (最初と最後の脚を除く)。簡単なリストを初期化しましょう:
var legs = new List<Leg>();
var l1 = new Leg { p1Id = 1, p2Id = 2 };
var l2 = new Leg { p1Id = 4, p2Id = 5 };
var l3 = new Leg { p1Id = 2, p2Id = 3 };
var l4 = new Leg { p1Id = 5, p2Id = 6 };
var l5 = new Leg { p1Id = 3, p2Id = 4 };
legs.Add(l1);
legs.Add(l2);
legs.Add(l3);
legs.Add(l4);
legs.Add(l5);
実際には、この脚のリストはソートされておらず、もちろん、この例のように ID は連続していません。
問題は、与えられた 2 つの点の間の連続した点のリストを返す関数を作成する方法です。
var myLegs = FindMyLegs(legs, 5, 2);
.. 次のリストを返す必要があります: 5, 4, 3, 2
LINQ と脚の内部結合リスト (legs1.pt2Id == feet2.pt1Id) によって 2 回実行される可能性があると思いますが、実際には LINQ の経験がなく、正しい方法を見つけることができません。
基本的に、いくつかの機能が必要です:
List<int> FindMyLegs(List<Leg> allLegs, int startPt, int endPt) { ??? }