假设我有两个点(实际上是 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 也不是连续的,就像这个例子中的情况一样。
问题是如何创建函数,它将返回两个给定点之间的连续点列表,所以:
var myLegs = FindMyLegs(legs, 5, 2);
.. 应该返回以下列表:5、4、3、2
我想这可能是由 LINQ 和内部连接列表两次完成的(legs1.pt2Id ==legs2.pt1Id),但我真的没有 LINQ 经验,我找不到正确的方法。
基本上我需要一些功能:
List<int> FindMyLegs(List<Leg> allLegs, int startPt, int endPt) { ??? }