求一个遍历算法的替代方案

FocusNT 2013-09-11 09:48:10
遍历算法中我希望实现当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
}
}
}
}
}
}
...全文
554 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
FocusNT 2013-09-26
  • 打赏
  • 举报
回复
谢谢,第一碰到你说的编译器问题,我看了下,就多了一个ToList
threenewbee 2013-09-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上使用上面的代码。
tcmakebest 2013-09-12
  • 打赏
  • 举报
回复
引用 2 楼 FocusNT 的回复:
假如我index1=0了,其它的没有等于0,其它几个for循环还是要走的,关键在这里,想不出怎么解决了
循环条件调整一下就好: for (int i1 = 0; i1 < index1 or i1 == 0;i1++ )
FocusNT 2013-09-11
  • 打赏
  • 举报
回复
非常感谢caozhy,这个就是我想要的,但是我发现http://bbs.csdn.net/topics/390572575这个里面你最后回复的代码生成结果好像不对额?
threenewbee 2013-09-11
  • 打赏
  • 举报
回复
http://bbs.csdn.net/topics/390572575
FocusNT 2013-09-11
  • 打赏
  • 举报
回复
先谢谢各位了,我用递归再试试
phommy 2013-09-11
  • 打赏
  • 举报
回复
试试不从0开始循环,而是从1开始?
FocusNT 2013-09-11
  • 打赏
  • 举报
回复
我不是说3L用了递归, 我需要根据条件来确定有几个循环。这几个循环没有上下层级关系的,如果index1不满足那就是其它4个循环了,如果index2和4不满足那就是循环1,3,5了
dota_sky_god 2013-09-11
  • 打赏
  • 举报
回复
引用 4 楼 FocusNT 的回复:
楼上可能理解错我的意思了。 关键是最后dosomething这里要做的事情导致我用递归也有点不好写,所以想到动态for循环的方式
3L并没有递归啊,只不过给出一个前置的判断,先判断完然后再进行你那个FOR循环
FocusNT 2013-09-11
  • 打赏
  • 举报
回复
楼上可能理解错我的意思了。 关键是最后dosomething这里要做的事情导致我用递归也有点不好写,所以想到动态for循环的方式
人生导师 2013-09-11
  • 打赏
  • 举报
回复
引用 2 楼 FocusNT 的回复:
假如我index1=0了,其它的没有等于0,其它几个for循环还是要走的,关键在这里,想不出怎么解决了
你在进行下面for循环的时候先添加一个判断就好了,如

if(index1==0||index2==0||index3==0||index4==0||index5==0)
{
return;
}
else
{
// 你的循环代码

}
FocusNT 2013-09-11
  • 打赏
  • 举报
回复
假如我index1=0了,其它的没有等于0,其它几个for循环还是要走的,关键在这里,想不出怎么解决了
tcmakebest 2013-09-11
  • 打赏
  • 举报
回复
等于0时条件不成立当然不循环,上述代码可以用,为何要替换?
zaz770977934 2013-09-11
  • 打赏
  • 举报
回复
引用 4 楼 FocusNT 的回复:
楼上可能理解错我的意思了。 关键是最后dosomething这里要做的事情导致我用递归也有点不好写,所以想到动态for循环的方式
比较笨的方法判断index1=0的时候就把index1=1~~不知道可以不?
as862214582 2013-09-11
  • 打赏
  • 举报
回复
想不出来 帮你顶一下吧
FocusNT 2013-09-11
  • 打赏
  • 举报
回复
在进入第二次循环的时候query数据变了
FocusNT 2013-09-11
  • 打赏
  • 举报
回复
就你那个拷贝过来的
FocusNT 2013-09-11
  • 打赏
  • 举报
回复

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));
            }
        }
    }
}
threenewbee 2013-09-11
  • 打赏
  • 举报
回复
你把你的代码贴出来,我拿VS中看看。
FocusNT 2013-09-11
  • 打赏
  • 举报
回复
一模一样的复制过来的
加载更多回复(4)

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧