Usuário com melhor resposta
Comparar Lists

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
el2
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 comforeach
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;
- Editado Matheus S. Silva domingo, 9 de setembro de 2018 12:46
Respostas
-
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
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
-
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