Como se livrar de duplicatas em um array Swift: guia claro para iniciantes
\n\nVocê já se deparou com uma situação em que seu array em Swift se transformou em um "lixão" de dados repetidos? Se sim, você não está sozinho. A pergunta "Removing duplicate elements from an array in Swift" no Stack Overflow acumulou milhares de visualizações — e não é surpresa. Trabalhar com duplicatas é uma das tarefas mais comuns que todo desenvolvedor enfrenta, seja iniciante ou profissional. Hoje vamos entender de uma vez por todas como remover elementos repetidos de um array em Swift de forma elegante e eficiente, usando métodos comprovados e exemplos reais de código.
\n\nPor que isso é importante: cenários práticos
\n\nImagine que você está escrevendo um aplicativo para gerenciar contatos. O usuário importa uma lista de 1000 registros, mas há 200 duplicatas. Ou você está trabalhando com dados de uma API, onde o mesmo produto aparece várias vezes. Duplicatas não apenas poluem a interface, mas também podem causar erros lógicos, aumentar o tempo de processamento e gerar confusão nos dados. Saber limpar arrays é uma base que economizará horas de depuração.
\n\nNeste tutorial, abordaremos várias abordagens: desde o uso simples de Set até métodos mais avançados que preservam a ordem dos elementos e trabalham com tipos de dados personalizados. Vamos lá!
Método 1: Usando Set — a maneira mais rápida e simples
\n\nA resposta mais popular no Stack Overflow para remover duplicatas de um array em Swift é usar a estrutura Set. Set é uma coleção não ordenada de elementos únicos. Ao converter o array em um Set, automaticamente eliminamos todas as repetições e, em seguida, convertemos de volta para um array.
Exemplo de código:
\n\nlet numbers = [1, 2, 3, 2, 4, 5, 1, 3]\nlet uniqueNumbers = Array(Set(numbers))\nprint(uniqueNumbers) // Saída: [5, 2, 3, 1, 4] (a ordem pode variar)\n\n\nEste método é extremamente rápido, especialmente em arrays grandes, pois Set usa hashing. Mas há um detalhe: a ordem dos elementos não é preservada. Se a ordem original for importante para você, continue lendo.
Quando usar Set?
\n- \n
- Quando a ordem dos elementos não importa. \n
- Quando você precisa de uma solução mais rápida possível. \n
- Quando trabalha com tipos primitivos (Int, String, Double, etc.) que estão em conformidade com o protocolo
Hashable. \n
Método 2: Preservando a ordem com NSOrderedSet
\n\nSe você trabalha em um projeto onde o Objective-C runtime é permitido (por exemplo, projetos antigos ou bases de código mistas), pode usar NSOrderedSet. Esta classe do Foundation preserva a ordem de inserção e remove duplicatas automaticamente.
Exemplo de código:
\n\nimport Foundation\n\nlet names = ["Ana", "Boris", "Ana", "Victor", "Boris"]\nlet uniqueNames = NSOrderedSet(array: names).array as! [String]\nprint(uniqueNames) // Saída: ["Ana", "Boris", "Victor"]\n\n\nVantagens: ordem preservada, código curto. Desvantagens: usa uma ponte com Objective-C, o que pode ser desnecessário para um projeto Swift puro. Além disso, NSOrderedSet é mais lento que o Set nativo devido à sobrecarga adicional.
Método 3: Filtragem personalizada com preservação de ordem (Swift puro)
\n\nEsta é a maneira mais flexível e recomendada para Swift moderno. Criamos um array vazio para o resultado e um Set para rastrear os elementos já encontrados. Percorrendo o array original, adicionamos o elemento ao resultado apenas se ele ainda não estiver no Set.
Exemplo de código:
\n\nfunc removeDuplicates<T: Hashable>(from array: [T]) -> [T] {\n var seen = Set<T>()\n var result = [T]()\n \n for element in array {\n