循环迭代器命名约定

时间:2012-08-11 12:08:57

标签: loops iterator naming-conventions

我们知道,不知何故,我们在循环中使用ij变量非常常见。如果需要一个双for循环,则很可能使用如下内容:

for (int i = 0; i < n; i++)
{
    for (int j = 0; j < m; j++)
    {
        // do some stuff...
    }
}

但是,如果我在这些循环中需要第三个for循环,我没有第三个迭代器的任何命名约定。我可能使用以下变量:rkiijj等...

是否存在第三个(等等......)循环迭代器的命名约定?

4 个答案:

答案 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适用于基本循环。对于更复杂的循环或实现不明显的情况,您应该考虑明确命名迭代器,例如: surveyIndexquestionIndex,而不是ij

答案 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,我更喜欢cntindexid之类的东西。对于一个cnt仍然很短并且快速输入。当人们看到你的代码时,人们会立即知道它是什么,它是一个反击,最重要的是,当你尝试使用搜索"i"这样的东西时,你会得到很多垃圾。我想看看

include <iostream>

int main ()

//hi there, this is a comment

for (int i = 0; i < 5; i++)

如果您{{1>}代表索引而不是,或者 cnt 更是如此,那么您只会看到你的内容期待,所以导航更舒服。

对于更复杂的循环虽然你绝对应该键入变量的全名,否则你只会混淆自己

相关问题