按先行/后继关系对对象列表进行分组

本文关键字:列表 对象 关系 | 更新日期: 2023-09-27 17:56:18

>我在列表中有类 A 的对象。

class A
{
  public int Start;
  public int End;
}

我想在此列表中执行一个 GroupBy,以便每个组仅包含在同一列表中具有直接前置或后继的对象(即:obj。End + 1 = otherObj.Start)。如何使用 LINQ 最优雅地完成此操作?

按先行/后继关系对对象列表进行分组

我会按StartEnd对列表进行排序并使用循环。这应该有效:

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 很少是最好的工具。