在这里,Space是一个以(xposition,yposition,zposition,长度,深度,高度)为元素的类,并且有一个type类型的列表。

我需要检查列表中是否符合if条件中的某些条件。

如果满足,那么我将两个空间合并为一个空间。在那之后,我删除了我已经使用的两个空格。实际上,这意味着将两个空间合并为一个空间。

新列表已创建。我再次将其视为新列表,并执行相同的过程,直到不满足条件为止。

我的问题是,它正在陷入无限循环。我想解决这个问题。

public class MergeSpace
{
    public List<Space> Mergespace(List<Space> Listofspaces)
    {
        foreach (Space space1 in Listofspaces)
        {
            foreach (Space space2 in Listofspaces)
            {
                //int count = 0;
                if ((space1.sheight == space2.sheight)
                    && (space1.sdepth == space2.sdepth)
                    && (space2.xposition == space1.xposition + space1.slength)
                    && (space2.yposition == space1.yposition)
                    && (space2.zposition == space1.zposition)
                    && (space1.semptyspace == true)
                    && (space2.semptyspace == true))
                {
                    Space space = new Space();
                    space.xposition = space1.xposition;
                    space.yposition = space1.yposition;
                    space.zposition = space1.zposition;
                    space1.slength = space1.slength + space2.slength;
                    space.sheight = space1.sheight;
                    space.sdepth = space1.sdepth;
                    space.semptyspace = true;
                    Listofspaces.Add(space);
                    Listofspaces.Remove(space1);
                    Listofspaces.Remove(space2);
                    Mergespace(Listofspaces);
                }

最佳答案

public class MergeSpace
        {
            public List<Space> Mergespace(List<Space> Listofspaces)
            {
              List<Space> mergedspacelist = new List<Space>();
              int count=0;
                foreach (Space space1 in Listofspaces)
                {
                    foreach (Space space2 in Listofspaces)
                    {
                        //int count = 0;
                        if ((space1.sheight == space2.sheight)
                            && (space1.sdepth == space2.sdepth)
                            && (space2.xposition == space1.xposition + space1.slength)
                            && (space2.yposition == space1.yposition)
                            && (space2.zposition == space1.zposition)
                            && (space1.semptyspace == true)
                            && (space2.semptyspace == true))
                        {
                            Space space = new Space();
                           space.xposition = space1.xposition;
                            space.yposition = space1.yposition;
                            space.zposition = space1.zposition;
                            space1.slength = space1.slength + space2.slength;
                            space.sheight = space1.sheight;
                            space.sdepth = space1.sdepth;
                            space.semptyspace = true;
                            mergedspacelist .Add(space);
                            count++;

                        }
                }
          }
          if(count>0)
         {
           Mergespace(mergedspacelist );
         }
}


我不知道您的实际需求是什么,我认为这可以避免无限循环

10-07 21:52