Интервальный контейнер в C # - PullRequest
0 голосов
/ 05 марта 2012

(я знаю, что это хромает.) Есть ли в C # контейнер интервалов?

Меня интересует, что он объединяет перекрывающиеся внутренние компоненты и что я могу найти интервалы, которые не находятся в контейнере, но находятся вопределенный интервал.

Ответы [ 4 ]

1 голос
/ 06 марта 2012

Вы должны реализовать класс, как показано ниже:

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 является более тривиальным способомЯ лично использовал класс, чтобы просто иметь дело с пустыми интервалами (На самом деле, если start - end> ​​= 0, тогда интервал пуст, вместо использования предопределенного пустого интервала, я думаю, мы можем установить его на ноль. Но я думаю, что это синтаксис suger.

0 голосов
/ 05 марта 2012

Нет. Вы должны быть в состоянии использовать LINQ для выполнения такой проверки на простом массиве пар.

0 голосов
/ 05 марта 2012

Кто-то по имени Яни Джанноудис разместил на CodeProject библиотеку периодов времени .NET , которая может соответствовать вашим потребностям.

0 голосов
/ 05 марта 2012

Используйте структуру TimeSpan .

...