C#是否有一个很好的方法来遍历一个范围内的每个整数,减去1个?

我的情况就像
// radius is an int[]
for ( int i = 0; i < radius.length; ++i )
{
   for ( int j = 0; j < radius.length; ++j ) 
   {
       // do some stuff
   }  
}

除了我实际上希望j通过0-radius.length的范围,但跳过i:

{0,1,...,i-1,i+1,radius.length}

我想知道是否有办法做到这一点是紧凑,优雅,高效,可读,甚至是正确的.

我打算怎么做

for ( int i = 0; i < radius.length; ++i )
{
   for ( int j = 0; j < radius.length; )
   {
       // do some stuff
       j += j != i ? 1 : 2;
   }

}

解决方法

>也许你可能会考虑使用continue:
// radius is an int[]
for (int i = 0; i < radius.length; ++i)    
   for (int j = 0; j < radius.length; ++j) 
   {
       if (i == j)
           continue;
       // do some stuff
   }

这是我能想到的最简单的一个.它正是代表你想要的一个独立的块.
>如果你想要更“紧凑”(“可读性很小”),你可以考虑使用多变量单循环而不是单个变量嵌套循环:

int r = radius.Length;
for (i = 0,j = 0; i < r - 1 || j < r; j++) {
    i += j == r ? 1 : 0;
    j %= r;
    if (i == j)
        continue;
    //do stuff
}

>或者不使用continue的另一种方法是(由Millie Smith建议):

for (int i = 0; i < radius.length; ++i)    
   for (int j = 0; j < radius.length; ++j)        
       if (i != j) {
           // do some stuff       
       }

这样,至少你可以摆脱所有的大括号,但是如果.

注意:但我个人认为您的解决方案(使用j = j!= i?1:2;)已经非常紧凑,可读!很难“打”!

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...