我有一个方法可以获得这个类的许多对象
class Range<T>
{
public T Start;
public T End;
}
Run Code Online (Sandbox Code Playgroud)
在我的情况T是DateTime,但让我们使用int的简便性.我想要一种方法,将这些范围折叠成覆盖相同"区域"但不重叠的区域.
所以,如果我有以下范围
该方法应该给我
猜猜它会被称为联盟?我想方法签名看起来像这样:
public static IEnumerable<Range<T>> Collapse<T>(
this IEnumerable<Range<T>>,
IComparable<T> comparer)
{
...
}
Run Code Online (Sandbox Code Playgroud)
我在这里看了一些类似的其他问题,但我还没有找到它的实现.这个答案和同一问题的其他一些答案描述了算法,但我不太清楚我是否理解算法.也不是特别擅长实现算法,所以我希望有人可以帮助我.
我的数学功能让我失望!我需要一种将网络范围减少到超集的有效方法,例如,如果我输入IP范围列表:
我想返回以下范围:
注意:输入列表没有排序(虽然它们可能是?).执行此操作的简单方法是检查列表中的每个范围,以查看输入范围x是否为子集,如果是,则不插入范围x.但是,无论何时插入新范围,它都可能是现有范围的超集,因此您必须检查现有范围以查看它们是否可以折叠(例如,从我的列表中删除).