Intersecção de Listas

Uma das coisas mais legais de estudar programação funcional é que com o tempo o mindset vai mudando e algumas soluções interessantes aparecem. Como nosso amado LINQ foi desenvolvido com o mindset funcional, ele trata com excelência listas (Lists Comprehension). Alguns exemplos de intersecção de listas.

Dado listA e ListB

   var listA = new int[] { 1, 2, 3, 4, 5 };
   var listB = new int[] { 4, 5, 6, 7, 8 };

Selecionar elementos de ListA comuns a ListB

   var intersectAB = listA.Intersect(listB);

Selecionar elementos de ListB comuns a ListA

   var intersectBA = listB.Intersect(listA);

Selecionar elementos de ListA que não são comuns a ListB

   var exceptAB = listA.Except(listB);

Selecionar elementos de ListB que não são comuns a ListA

   var exceptBA = listB.Except(listA);

Selecionar elementos de ambas as listas que não possuam intersecção

   var symetric = listA
       .Except(listB)
       .Union(
           second: listB
           .Except(listA));

Quando a lista for grande ou complexa, é possível fazer a operação de exceção simétrica utilizando um hashset, que irá modificar a hashset collection, selecionando os elementos de ambas as listas que não possuam intersecção.

   var hashSet = new HashSet<int>(listA);
   hashSet.SymmetricExceptWith(listB);

LinqExercises at GitHub

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s