Remoção de duplicatas de um array em Swift: tutorial para iniciantes

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Como se livrar de duplicatas em um array Swift: guia claro para iniciantes

\n\n

Você 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\n

Por que isso é importante: cenários práticos

\n\n

Imagine 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\n

Neste 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á!

\n\n

Método 1: Usando Set — a maneira mais rápida e simples

\n\n

A 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.

\n\n

Exemplo de código:

\n\n
let 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\n

Este 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.

\n\n

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
\n\n

Método 2: Preservando a ordem com NSOrderedSet

\n\n

Se 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.

\n\n

Exemplo de código:

\n\n
import 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\n

Vantagens: 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.

\n\n

Método 3: Filtragem personalizada com preservação de ordem (Swift puro)

\n\n

Esta é 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.

\n\n

Exemplo de código:

\n\n
func removeDuplicates<T: Hashable>(from array: [T]) -> [T] {\n    var seen = Set<T>()\n    var result = [T]()\n    \n    for element in array {\n                

Blogs

Book Recommendations