删除二维数组中的重复项

时间:2017-02-28 08:52:10

标签: c arrays

我有5700行和3列2d数组。 必须从该数组中消除重复的行,并从多个重复的行中只打印一行。 数= 5700。 例如,

24.742235   0.005334    0.052465    
27.345229   -0.222687   0.266042    
27.345229   -0.222687   0.266042    
25.528389   -0.063540   0.117000    
24.742235   0.005334    0.052465    
25.528389   -0.063540   0.117000    
24.742235   0.005334    0.052465    
25.528389   -0.063540   0.117000    
24.742235   0.005334    0.052465    
25.528389   -0.063540   0.117000    
27.345229   -0.222687   0.266042    
24.742235   0.005334    0.052465    
27.345229   -0.222687   0.266042    
25.528389   -0.063540   0.117000    
25.528389   -0.063540   0.117000    
27.345229   -0.222687   0.266042    
27.345229   -0.222687   0.266042    
24.742235   0.005334    0.052465    
24.742235   0.005334    0.052465    
27.345229   -0.222687   0.266042    

代码:

for(p=0;p<count;p++)
{
  for(ppp=p+1;ppp<count;ppp++) 
  {
    if(plane[ppp][1]!=plane[p][1])
    {
      printf("%lf\t%lf\t%lf\n",plane[p][0],plane[p][1],plane[p][2]);
      printf("%lf\t%lf\t%lf\n",plane[ppp][0],plane[ppp][1],plane[ppp][2]);
    }
  }
}

我想从该示例中删除重复的行。第2行和第3行相同。所以我想只显示2或3行。

1 个答案:

答案 0 :(得分:0)

执行此操作的简单功能如下(注意:仍有待测试,请将此视为大纲):

int A[5700][3];

int elimdups(void)
{
    int i, j, k, m, n=5700;
    for (i=0; i<n-1; i++) {                     // for all rows
        for (j=i+1; j<n-1; j++) {               //  for all next rows
            for (k=0; k<3; k++)                 //   for each cell
                if (A[i][k]!=A[j][k]) break;    //    check cells equal

            if (k<3) {                          // row j is duplicate of row i
                for (k=j; k<n-1; k++)           //  move all rows up
                    for (m=0;m<3;m++)
                        A[k][m]= A[k+1][m];
                n--;
            }
        }
    }
    return n;
}