整数集c#的区间表示

本文关键字:区间 表示 整数 | 更新日期: 2023-09-27 18:25:01

这是我得到的一个赋值,它说如果哈希集包含值{12, 13, 14, 23, 88, 89, 90, 91},那么它们将被表示作为间隔集合CCD_ 2。

现在的问题是,我应该使用for each吗?我有点困惑,因为我不确定你是否可以将几个区间分组为一个集,或者应该有不同的哈希集?

我确实研究过一些方法,比如groupby,但我不知道这是否是正确的方法。

建议或提示不胜感激!

整数集c#的区间表示

我会首先对它们进行排序,然后迭代有序集,并组合元素,只要差异只有一个。

IEnumerable<Tuple<int,int>> GetIntervals(IEnumerable<int> seq)
{
    var orderedSet=seq.OrderBy(i=>i);
    bool first=true;
    int startOfInterval=0,endOfInterval=0;
    foreach(var element in orderedSet)
    {
      if(first)
      {
        startOfInterval=element;
        endOfInterval=element;
        first=false;
      }
      else
      {
        if(element==endOfInterval+1)
          endOfInterval=element;
        else
        {            
          yield return Tuple.Create(startOfInterval, endOfInterval);
          startOfInterval=element;
          endOfInterval=element;
        } 
      }
    }
    yield return Tuple.Create(startOfInterval, endOfInterval);
}
void Main()
{
  var input=new int[]{12, 13, 14, 23, 88, 89, 90, 91};
  GetIntervals(input).Dump();
}

请注意,这需要在输入中使用不同的元素。如果输入是一个散列集,那是有保证的。否则,在调用OrderBy之前先抛出一个Distict()调用。