我在列表中有A类对象。
class A
{
public int Start;
public int End;
}
我想在此列表中执行GroupBy,以便每个组仅包含在同一列表中具有直接前置或后继的对象(即:obj.End + 1 = otherObj.Start)。如何使用LINQ完美地实现这一目标?
答案 0 :(得分:1)
我会按Start
和End
订购列表并使用循环。这应该有效:
List<List<A>> successors = new List<List<A>>();
List<A> ordered = As.OrderBy(x => x.Start).ThenBy(x => x.End).ToList();
List<A> last = new List<A>(){ ordered.First() };
successors.Add(last);
for(int i = 1; i < ordered.Count; i++)
{
A currentA = ordered[i];
A lastA = last.Last();
if (currentA.Start == lastA.End)
last.Add(currentA);
else
{
last = new List<A>() { currentA };
successors.Add(last);
}
}
如果涉及索引,LINQ很少是最好的工具。