我有 5700 行和 3 列的二维数组。 必须从该数组中消除重复的行,并仅打印多个重复行中的一行。 计数=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 行。
最佳答案
执行此操作的简单函数如下(注意:仍有待测试,因此请将此视为概要):
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;
}
关于c - 删除二维数组中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42504082/