我有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行。
答案 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;
}