我们知道,不知何故,我们在循环中使用i
和j
变量非常常见。如果需要一个双for
循环,则很可能使用如下内容:
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
// do some stuff...
}
}
但是,如果我在这些循环中需要第三个for
循环,我没有第三个迭代器的任何命名约定。我可能使用以下变量:r
,k
,ii
,jj
等...
是否存在第三个(等等......)循环迭代器的命名约定?
答案 0 :(得分:5)
可读性最重要的是明显的名字 i和j 不是最明显的,但对于简单的情况可能没问题。考虑一下这个(不可否认的有点想法)的例子;
static void Main(string[] args)
{
for(int i = 0; k < 100; k++)
for (int j = 0; k < 100; k++)
for (int k = 0; k < 100; k++)
Console.WriteLine("" + i + "-" + j + "-" + k);
}
VS
static void Main(string[] args)
{
for(int survey = 0; survey < 100; survey++)
for (int question = 0; question < 100; question++)
for (int option = 0; option < 100; option++)
Console.WriteLine("" + survey + "-" + question + "-" + option);
}
很容易看出哪个更有意义。但是,虽然我们正在努力,但是如何让它更具可读性,同时更加消除您的命名问题;
static void Main(string[] args)
{
for(int survey = 0; survey < 100; survey++)
PrintSurvey(survey);
}
private static void PrintSurvey(int survey)
{
for (int question = 0; question < 100; question++)
PrintQuestion(survey, question);
}
private static void PrintQuestion(int survey, int question)
{
for (int option = 0; option < 100; option++)
PrintOption(survey, question, option);
}
private static void PrintOption(int survey, int question, int option)
{
Console.WriteLine("" + survey + "-" + question + "-" + option);
}
对于这个简单的循环可能有点过分/冗长,只是想说明有更多方法可以处理嵌套循环的命名问题,而不仅仅是找到唯一的名称。
答案 1 :(得分:2)
这些事情没有确定的惯例。 i
适用于基本循环。对于更复杂的循环或实现不明显的情况,您应该考虑明确命名迭代器,例如: surveyIndex
和questionIndex
,而不是i
和j
。
答案 2 :(得分:2)
在计算机视觉应用程序中看到嵌套循环的情况并不少见,正如其他人所说,至少在字母的顺序上没有约定,但通常人们倾向于使用字母i,j,k,l,m,n,q,h...
这是例如用于过滤图像的二维离散卷积的可能实现:
/* The Input image I and Output image O have M*N pixels.
* The kernel H has size (2k+1)*(2k+1)
*/
for (i=k; i<M-k; i++) {
for (j=k; j<N-k; j++) {
temp=0;
for (m=-k; m<=k; m++)
for (n=-k; n<=k; m++)
temp = temp + I[i-m,j-n] * H[m+k,n+k];
O[i,j] = temp;
}
}
Here你可以在C ++中看到另一个实现。
答案 3 :(得分:0)
我实际上几乎从不使用i,我更喜欢cnt
,index
或id
之类的东西。对于一个cnt
仍然很短并且快速输入。当人们看到你的代码时,人们会立即知道它是什么,它是一个反击,最重要的是,当你尝试使用搜索"i"
这样的东西时,你会得到很多垃圾。我想看看
include <iostream>
int main ()
//hi there, this is a comment
for (int i = 0; i < 5; i++)
如果您{{1>}代表索引而不是我,或者 cnt 更是如此,那么您只会看到你的内容期待,所以导航更舒服。
对于更复杂的循环虽然你绝对应该键入变量的全名,否则你只会混淆自己