相关疑难解决方法(0)

折叠一组可能重叠的范围有什么好的通用算法?

我有一个方法可以获得这个类的许多对象

class Range<T>
{
    public T Start;
    public T End;
}
Run Code Online (Sandbox Code Playgroud)

在我的情况TDateTime,但让我们使用int的简便性.我想要一种方法,将这些范围折叠成覆盖相同"区域"但不重叠的区域.

所以,如果我有以下范围

  • 1至5
  • 3到9
  • 11至15
  • 12至14岁
  • 13至20

该方法应该给我

  • 1至9
  • 11至20

猜猜它会被称为联盟?我想方法签名看起来像这样:

public static IEnumerable<Range<T>> Collapse<T>(
    this IEnumerable<Range<T>>, 
    IComparable<T> comparer)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

我在这里看了一些类似的其他问题,但我还没有找到它的实现.这个答案和同一问题的其他一些答案描述了算法,但我不太清楚我是否理解算法.也不是特别擅长实现算法,所以我希望有人可以帮助我.

c# generics algorithm union range

34
推荐指数
2
解决办法
4392
查看次数

标签 统计

algorithm ×1

c# ×1

generics ×1

range ×1

union ×1