DEV Community

Matheus Musa
Matheus Musa

Posted on

De Array para Set e Volta: Uma Jornada Sem ou Com Duplicatas!

Introdução

Tanto Set quanto Array são estruturas de dados essenciais em JavaScript e TypeScript, permitindo que os desenvolvedores manipulem coleções de elementos. Embora possam parecer semelhantes à primeira vista, eles têm diferenças cruciais e usos otimizados. A escolha entre eles pode influenciar tanto a performance quanto a clareza do código.

O Básico

Set:

Descrição: É uma coleção de valores onde cada valor deve ser único.

Características Principais:

  • Valores únicos.
  • Inserção e remoção eficientes.
  • Verificação de existência rápida.

Array:

Descrição: Estrutura de dados linear que pode conter vários elementos, incluindo duplicatas.

Características Principais:

  • Pode conter valores duplicados.
  • Acesso direto aos elementos via índice.
  • Uma vasta gama de métodos para manipulação.

Velocidade de Consulta: Set vs Array

Uma das diferenças mais cruciais entre Set e Array é a eficiência ao verificar a existência de um item.

Set:

A principal vantagem do Set é sua velocidade de consulta. Internamente, Set é implementado como uma estrutura de dados de tabela hash. Isso significa que quando você verifica se um item existe no Set usando o método has(), o JavaScript pode localizar esse item extremamente rápido, quase em tempo constante. Por exemplo:

let mySet = new Set(["apple", "banana", "cherry"]); console.log(mySet.has("banana"));  // Isso é super rápido!
Enter fullscreen mode Exit fullscreen mode

Essa eficiência é especialmente notável quando trabalhamos com grandes conjuntos de dados. Se você tem um Set com milhões de itens e deseja verificar se um determinado item existe, o Set pode fazer isso muito mais rápido do que um Array.

Array:

Quando você tenta verificar a existência de um item em um Array, o JavaScript precisa percorrer potencialmente cada item do Array até encontrar o que está procurando (ou não). Isso é conhecido como uma busca linear e, em casos de pior cenário (por exemplo, o item não existe no Array), pode ser bastante lento. Por exemplo:

let myArray = ["apple", "banana", "cherry"]; console.log(myArray.includes("banana"));  // Isso pode ser mais lento, especialmente para grandes arrays.
Enter fullscreen mode Exit fullscreen mode

Adicionando Elementos

Set:

Ao usar add, você garante que cada valor seja único. Se você tentar adicionar um item já existente, ele não fará nada, mantendo a integridade do Set.

let colorsSet = new Set();
colorsSet.add("red");
colorsSet.add("blue");
colorsSet.add("red"); // "red" permanece único no Set.
Enter fullscreen mode Exit fullscreen mode

Array:

Com push, você simplesmente adiciona um elemento ao final.

let colorsArray = [];
colorsArray.push("red");
colorsArray.push("blue");
colorsArray.push("red"); // Duplicatas são permitidas.
Enter fullscreen mode Exit fullscreen mode

Verificar o Tamanho

Set:

Verificar o tamanho do Set é feito através da propriedade size.

console.log(colorsSet.size);  // Exibe o número de elementos no Set.
Enter fullscreen mode Exit fullscreen mode

Array:

Verificar o tamanho de um Array é feito através da propriedade length.

console.log(colorsArray.length);  // Exibe o número de elementos no Array.
Enter fullscreen mode Exit fullscreen mode

Esclarecimento sobre a Ordem

Set:

Set mantém a ordem de inserção dos elementos. O primeiro valor que você adicionar será o primeiro a ser retornado durante a iteração.

Array:

A ordem em um Array é mantida pelo índice. O índice inicial é 0, e cada novo elemento adicionado aumenta o índice.

Limpar Todos os Elementos

Set:

Para limpar todos os elementos de um Set, use o método clear.

colorsSet.clear();
Enter fullscreen mode Exit fullscreen mode

Array:

Para limpar todos os elementos de um Array, você pode simplesmente definir seu length como 0.

colorsArray.length = 0;
Enter fullscreen mode Exit fullscreen mode

Cenários Adicionais de Uso

Ordenação:

Set não tem um método de ordenação direta. Para ordenar um Set, os desenvolvedores geralmente convertem em um Array, usam o método sort() e, se necessário, convertem de volta para um Set.

let sortedSet = new Set([...colorsSet].sort());
Enter fullscreen mode Exit fullscreen mode

Por outro lado, o Array tem um método de ordenação embutido.

colorsArray.sort();
Enter fullscreen mode Exit fullscreen mode

Pesquisa Avançada:

Enquanto Set é otimizado para verificações de existência, o Array oferece mais flexibilidade em pesquisas avançadas, como encontrar um objeto com base em propriedades específicas usando find() ou filtrar uma coleção de itens com base em critérios específicos usando filter().

Removendo Elementos

Set:

A remoção é direta, pois você remove com base no valor.

colorsSet.delete("red");
Enter fullscreen mode Exit fullscreen mode

Array:

Para remover, geralmente utilizamos filter ou outras funções.

colorsArray = colorsArray.filter(color => color !== "red");
Enter fullscreen mode Exit fullscreen mode

Iteração

Set:

A iteração é simples e percorre cada elemento.

colorsSet.forEach(color => console.log(color));
Enter fullscreen mode Exit fullscreen mode

Array:

Similar ao Set, mas com acesso direto ao índice também.

colorsArray.forEach((color, index) => console.log(`Index: ${index}, Color: ${color}`));
Enter fullscreen mode Exit fullscreen mode

Transformação

Set:

Não possui um método direto de transformação. Isso é uma das razões pela qual os desenvolvedores frequentemente convertem Sets para Arrays, fazem as transformações desejadas no Array e depois, se necessário, convertem de volta para um Set.

let capitalizedColorsSet = new Set([...colorsSet].map(color => color.toUpperCase()));
Enter fullscreen mode Exit fullscreen mode

No Array:

Arrays possuem o método map diretamente.

let capitalizedColorsArray = colorsArray.map(color => color.toUpperCase());
Enter fullscreen mode Exit fullscreen mode

Cenários de Uso Recomendados

Remoção de Duplicatas: Set é ideal devido à sua garantia de unicidade.

const numbers = [1, 2, 2, 3, 3]; const unique = [...new Set(numbers)];
Enter fullscreen mode Exit fullscreen mode

Verificações Rápidas de Existência: Com a eficiência de Set e o método has, verificações são rápidas.

if (colorsSet.has("blue")) { console.log("Blue exists in the Set!"); }
Enter fullscreen mode Exit fullscreen mode

Transformações Frequentes e Complexas: Arrays, com sua vasta gama de métodos integrados, são ideais para transformações.

const squaredNumbers = [1, 2, 3].map(num => num * num);
Enter fullscreen mode Exit fullscreen mode

Quando a Duplicidade é Necessária: Arrays permitem armazenar valores repetidos, o que é útil em cenários como registros de votos, logs de ação do usuário ou históricos de transações.

Conclusão

Ao final desta exploração entre Set e Array, esperamos que alguns pontos-chave estejam claros:

Unicidade vs Duplicidade:

  • Use Set quando você precisa garantir que cada item seja único.
  • Use Array quando a duplicidade é aceitável ou desejada.

Eficiência de Consulta:

  • Para verificações rápidas de existência, especialmente em grandes conjuntos de dados, o Set é o vencedor claro. No entanto, se você precisar de operações mais complexas, como mapeamento, filtragem ou redução, o Array oferece uma ampla variedade de métodos embutidos..

Manipulação de Dados:

  • Array é a escolha para transformações mais complexas devido à sua vasta gama de métodos integrados, como map, filter e reduce.

Flexibilidade

  • Lembre-se de que você pode facilmente converter entre Set e Array usando técnicas de espalhamento (...), o que oferece muita flexibilidade no manuseio de coleções de dados.

Dica Didática: A escolha entre Set e Array muitas vezes não é preto no branco. A decisão pode depender do problema específico, dos dados e das operações necessárias. Portanto, encorajamos você a experimentar ambas as opções e a medir a performance em cenários do mundo real. Lembre-se de que a melhor maneira de internalizar esses conceitos é através da prática. Crie pequenos exemplos, teste os métodos discutidos e observe o comportamento de Set e Array em diferentes cenários.

Lembre-se: A escolha da ferramenta certa para o trabalho não só melhora a eficiência do seu código, mas também sua clareza e manutenibilidade. Feliz codificação!

Top comments (1)

Collapse
 
tautorn profile image
Bruno Carneiro

Muito top!