我有这段代码:
int LRLength = LR.Count;
for (int i = 0; i < LR.Count; i++)
{
LRLength = LR.Count;
LR = merge(LR);
if (LR.Count < LRLength)
{
LR = merge(LR);
if (LR.Count == LRLength)
{
break;
}
}
}
这是函数合并:
private List<Lightnings_Extractor.Lightnings_Region> merge(List<Lightnings_Extractor.Lightnings_Region> Merged)
{
List<Lightnings_Extractor.Lightnings_Region> NewMerged = new List<Lightnings_Extractor.Lightnings_Region>();
Lightnings_Extractor.Lightnings_Region reg;
int dealtWith = -1;
for (int i = 0; i < Merged.Count; i++)
{
if (i != dealtWith)
{
reg = new Lightnings_Extractor.Lightnings_Region();
if (i < Merged.Count - 1)
{
if (Merged[i].end + 1 >= Merged[i + 1].start)
{
reg.start = Merged[i].start;
reg.end = Merged[i + 1].end;
NewMerged.Add(reg);
dealtWith = i + 1;
}
else
{
reg.start = Merged[i].start;
reg.end = Merged[i].end;
NewMerged.Add(reg);
}
}
else
{
reg.start = Merged[i].start;
reg.end = Merged[i].end;
NewMerged.Add(reg);
}
}
}
return NewMerged;
}
在这个类中:Lightnings_Extractor.Lightnings_Region我只有两个int变量。 这个函数的想法是获得一个List并合并一致的区域。
例如,一旦我调用该函数并且列表LR长度为8,现在我将减少它。例如,如果它需要将两个索引合并为一个那么List我将得到返回的长度将是7.如果它需要合并另一个索引,那么长度将是6,依此类推。
我想要检查上面的第一个代码是什么时候我应该停止调用函数来合并索引。
如果长度为8,则下次仍为8时,不会停止循环。 如果长度为8,则下一次为7,然后再次调用该函数。 如果长度为7则停止循环。但如果长度为6,请继续再次调用它。
直到最后一个长度与之前的长度相同!!!
所以我尝试了这段代码,但效果不好:
int LRLength = LR.Count;
for (int i = 0; i < LR.Count; i++)
{
LRLength = LR.Count;
LR = merge(LR);
if (LR.Count < LRLength)
{
LR = merge(LR);
if (LR.Count == LRLength)
{
break;
}
}
}
答案 0 :(得分:2)
尝试对您要完成的任务做出一些假设。以下将基本捕获列表的原始长度以进行比较。它将至少运行一次,并继续运行直到LRLength == LR.Count
int LRLength = LR.Count;
do{
LR = merge(LR);
} while(LR.Count != LRLength);
如果您尝试运行循环,直到您连续两次获得相同的计数:
int prevCount;
do{
prevCount = LR.Count;
LR = merge(LR);
} while(prevCount != LR.Count);