-4

我有这个代码:

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 变量。这个函数的想法是获取一个列表并合并一致的区域。

例如,一旦我调用该函数并且列表 LR 长度为 8,现在我会少取回它。例如,如果需要将两个索引合并为一个,那么我将得到的列表返回长度为 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;
                        }
                    }
                }
4

1 回答 1

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);
于 2013-02-09T20:51:06.730 回答