我正在尝试从 ArrayList 中删除重复项。每个元素重复不超过 5 次。为什么每次都会留下 2 个重复项? (0,0,1,2,2,3,3,4,4,5)。
void quitarRepetidos_lista(ArrayList* lista)
{
eNumero* auxNumero;
eNumero* auxNumero2;
int i,j;
if ( lista != NULL )
{
for (i = 0; i<lista->len(lista); i++)
{
auxNumero = lista->get(lista,i);
for ( j = i+1; j<lista->len(lista); j++ )
{
auxNumero2 = lista->get(lista,j);
if ( numero_compare(auxNumero,auxNumero2) == 0)
{
lista->remove(lista,j);
}
}
}
}
}
int numero_compare(eNumero* numeroAlfa, eNumero* numeroBeta)
{
if ( ((eNumero*)numeroAlfa)->numero >((eNumero*)numeroBeta)->numero )
{
return 1;
}
if ( ((eNumero*)numeroAlfa)->numero < ((eNumero*)numeroBeta)->numero )
{
return -1;
}
return 0;
}
应该是 012345
最佳答案
从列表中删除元素后,不应增加 j
,否则最终会跳过下一个元素(该元素采用刚刚删除的元素的索引) .
而不是:
if ( numero_compare(auxNumero,auxNumero2) == 0)
{
lista->remove(lista,j);
}
仅当删除元素时才应递减 j
:
if ( numero_compare(auxNumero,auxNumero2) == 0)
{
lista->remove(lista,j--);
}
关于c - 从数组列表中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47602711/