C#中的Interval容器

时间:2012-03-05 19:13:45

标签: c# .net algorithm c#-4.0

(我知道这很蹩脚。)C#中是否有间隔容器?

我感兴趣的是它结合了重叠的内部结构,并且我可以找到不在容器中但在特定间隔内的间隔。

4 个答案:

答案 0 :(得分:1)

你应该实现如下的类:

public class Interval
{
   public long Start {get;set;}
   public long End{get;set;}

   public bool IsIn(Interval interval)
   {
      return Start >= interval.Start && End < interval.End;
   }

   public Interval Intersection(Interval interval)
   {
      if (interval == null)
        return false;

      if (IsIn(interval))
         return interval;
      if (interval.IsIn(this))
         return this;
      if ....
   }

   public Interval Union(Interval interval)
   {....}

   public bool IsIn(List<Interval> intervals)
   {
       return intrvals.Any(x=>IsIn(x));
   }

   public List<Interval> Intersect(List<Interval> intervals)
   {....}

   public List<Interval> Union(List<Interval> intervals)
   {....}
}

编辑:正如@zmbq在评论中提到的,这可以通过struct来完成,struct在这种情况下更简单,我个人用class来处理空间隔(实际上如果启动的话) - end&gt; = 0,然后interval是空的,而不是使用预定义的空间隔,我想我们可以将它设置为null。但我认为这是语法suger。

答案 1 :(得分:0)

使用TimeSpan结构。

答案 2 :(得分:0)

没有。您应该能够使用LINQ对简单的数组对执行此类检查。

答案 3 :(得分:0)

有人以Jani Giannoudis的名义在CodeProject上发布了.NET time period library,可能符合您的需求。