整数集c#的区间表示
本文关键字:区间 表示 整数 | 更新日期: 2023-09-27 18:25:01
这是我得到的一个赋值,它说如果哈希集包含值{12, 13, 14, 23, 88, 89, 90, 91}
,那么它们将被表示作为间隔集合CCD_ 2。
现在的问题是,我应该使用for each吗?我有点困惑,因为我不确定你是否可以将几个区间分组为一个集,或者应该有不同的哈希集?
我确实研究过一些方法,比如groupby,但我不知道这是否是正确的方法。
建议或提示不胜感激!
我会首先对它们进行排序,然后迭代有序集,并组合元素,只要差异只有一个。
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()
调用。