c - 从数组列表中删除重复项

标签 c arraylist duplicates

我正在尝试从 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/

相关文章:

c - OpenCV 和 C,cvPreprocessCategoricalResponses 中的错误参数(响应 #0 不是整数)

list - 用于检查列表是否存在重复项的 Scheme 函数

java - ArrayList for 循环迭代器导致无限循环

java - 查找数组中的重复项并仅打印一次

MySQL 选择具有 LEAST 条件的重复项

c - 为什么在以下代码中出现段错误?

c - 共享内存上的原子操作

在 C 程序中创建文件名导致段错误

java - 获取 arrayList 中的特定对象

java - 如何使用另一个类中的方法从一个 java 类中的 MD 数组中删除重复项