none
Comparar Lists RRS feed

  • Pergunta

  • Tendo as seguintes listas:

    var l1 = new List<string>() { "a", "b", "C" };
    var l2 = new List<string>() { "a", "b", "C" };
    var l3 = new List<string>() { "a", "b", "C", "e" };
    Qual seria a melhor forma se fazer comparações entre essas listas, ou seja, saber se possuem a mesma quantidade e os mesmos elementos? l1 e l2 são iguais, possuem a mesma quantidade e os mesmos elementos. l3 é diferente dos dois, possui um elemento a mais mesmo que os demais sejam iguais. Ou seja, para uma lista ser igual à outra ela deve ter exatamente a mesma quantidade e os mesmos elementos, qualquer coisa fora disso é diferente. Eu faria com foreach comparando item por item, mas acho que pode existir uma forma melhor. Existe alguma forma mais enxuta??

    Pseudo código:

    // Listas são iguals?
    bool res = true; 
    
    if len(l1) == len(l2)
        foreach(x in l1)
            foreach(y in l2)
                if (x != y)
                {
                    res = false;
                    return res;
                }
     else
         res = false;
    
    return res;



    domingo, 9 de setembro de 2018 12:29

Respostas

Todas as Respostas

  • Matheus S. Silva,

       Sim, acredito que seja algum desses que você esteja procurando:

    var a = new[] {1, 2, 3, 4, 4, 3, 1, 1, 2};
    var b = new[] { 4, 3, 2, 3, 1, 1, 1, 4, 2 };
    
    // result below should be true, since the two sets are equivalent...
    var areEquivalent = (a.Count() == b.Count()) && !a.Except(b).Any(); 


    ==================================================================
    Compare two List<T> objects for equality, ignoring order [duplicate]
    https://stackoverflow.com/questions/3669970/compare-two-listt-objects-for-equality-ignoring-order
    ==================================================================

    var aContemB = !b.Except(a.Select(p => p.Tag).ToList()).Any();
    var listaA = a.Select(p => p.Tag).ToList();
    var listaB = b.ToList(); // Isto garante que todos os SQL foram executados antes da comparação.
    var aContemB = !listaB.Except(listaA).Any();

    ==================================================================
    Linq Comparar duas listas de tipos diferentes
    https://pt.stackoverflow.com/questions/114792/linq-comparar-duas-listas-de-tipos-diferentes
    ==================================================================

    int[] lista1 = new int[] { 1, 2, 3 };
    int[] lista2 = new int[] { 1, 5 };
    
    var query = from item in lista1.Concat(lista2)
             group item by item into result
             where result.Count() == 1
             select result.FirstOrDefault();
    
    int[] resultado = query.ToArray();
    // Resultado: { 2, 3, 5 }

    ===================================================================
    Comparando duas listas
    https://social.msdn.microsoft.com/Forums/pt-BR/9920d9f1-8885-42a6-841b-e40f38ed1d77/comparando-duas-listas
    ===================================================================

    []'s,
    Fabio I.

    • Editado Fabio I segunda-feira, 10 de setembro de 2018 12:03
    segunda-feira, 10 de setembro de 2018 12:00
  • Na verdade consegui resolver com LINQ usando SequenceEquals().

    lista1.SequenceEquals(lista2);

    • Marcado como Resposta Matheus S. Silva quinta-feira, 13 de setembro de 2018 23:45
    quinta-feira, 13 de setembro de 2018 23:45