遍历算法中我希望实现当index1,index2,index3,index4,index5中不等于0时才有下面对应的for循环,如果等于0的话就不循环这个for循环,不知道有没有什么解决方案?或者说有没有替代的方法
            int index1=3;
int index2=3;
int index3=2;
int index4=4;
int index5=4

            int totalStep = 500            for (int i1 = 0; i1 < index1;i1++ )
            {
                for (int i2 = 0; i2 < index2; i2++)
                {
                    for (int i3 = 0; i3 < index3; i3++)
                    {
                        for (int i4 = 0; i4 < index4; i4++)
                        {
                            for (int i5 = 0; i5 < index5; i5++)
                            {
                                for (int time = 0; time < totalStep; time++)
                                {
                                   //dosomething
                                }
                            }
                        }
                    }
                }
            }
算法遍历解决方案

解决方案 »

  1.   

    假如我index1=0了,其它的没有等于0,其它几个for循环还是要走的,关键在这里,想不出怎么解决了
      

  2.   

    你在进行下面for循环的时候先添加一个判断就好了,如if(index1==0||index2==0||index3==0||index4==0||index5==0)
    {
    return;
    }
    else
    {
    // 你的循环代码}
      

  3.   

    楼上可能理解错我的意思了。
    关键是最后dosomething这里要做的事情导致我用递归也有点不好写,所以想到动态for循环的方式
      

  4.   


    3L并没有递归啊,只不过给出一个前置的判断,先判断完然后再进行你那个FOR循环
      

  5.   

    我不是说3L用了递归,
    我需要根据条件来确定有几个循环。这几个循环没有上下层级关系的,如果index1不满足那就是其它4个循环了,如果index2和4不满足那就是循环1,3,5了
      

  6.   

    非常感谢caozhy,这个就是我想要的,但是我发现http://bbs.csdn.net/topics/390572575这个里面你最后回复的代码生成结果好像不对额?
      

  7.   


    怎么不对
    四重循环,结果是3x2x2x1=12种
      

  8.   


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;namespace ForAndFor
    {
        class Program
        {
            static void Main(string[] args)
            {
                int[][] data = new int[][] 
                { 
                    new int[] { 1, 2, 3 },
                    new int[] { 4, 5 },
                    new int[] { 7, 8 },
                    new int[] { 9 }
                };
                var query = data[0].Select(x => new int[] { x });
                foreach (var item in data.Skip(1))
                {
                    query = query.SelectMany(x => item.Select(y => x.Concat(new int[] { y }).ToArray()));
                }
                foreach (var item in query)
                {
                    Console.WriteLine(string.Join(", ", item));
                }
            }
        }
    }
      

  9.   

    在进入第二次循环的时候query数据变了
      

  10.   

    比较笨的方法判断index1=0的时候就把index1=1~~不知道可以不?
      

  11.   

    循环条件调整一下就好:
    for (int i1 = 0; i1 < index1 or i1 == 0;i1++ )
      

  12.   

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;namespace ForAndFor
    {
        class Program
        {
            static void Main(string[] args)
            {
                int[][] data = new int[][] 
                { 
                    new int[] { 1, 2, 3 },
                    new int[] { 4, 5 },
                    new int[] { 7, 8 },
                    new int[] { 9 }
                };
                var query = data[0].Select(x => new int[] { x }).ToList();
                foreach (var item in data.Skip(1))
                {
                    query = query.SelectMany(x => item.Select(y => x.Concat(new int[] { y }).ToArray())).ToList();
                }
                foreach (var item in query)
                {
                    Console.WriteLine(string.Join(", ", item));
                }
            }
        }
    }不好意思,之前用的VS2012,编译器修改了。在VS2010上使用上面的代码。
      

  13.   

    谢谢,第一碰到你说的编译器问题,我看了下,就多了一个ToList