Usuário com melhor resposta
Verificar item em comum dentre várias listas

Pergunta
-
Bom dia.
Preciso de um método que verifica se dentre os objetos de várias listas, existe algum que é comum em todas.
Exemplo:
Lista A
- obj1
- obj2
- obj3
Lista B
- obj1
- obj5
- obj7
Lista C
- obj1
- obj4
- obj6
Preciso identificar se existe algum obj em comum entre essas listas.
Se existir, preciso obter as informações desse objeto.
Nesse caso existe, é o obj1.
Valew, abraços.
Respostas
-
Olá Ferboni,
Você poderia sobrescrever o método Equals do seu objeto. Mais ou menos assim:
public class NomeDaClasse { //... public override bool Equals(object obj) { if (obj == null || obj.GetType() != typeof(NomeDaClasse)) return false; NomeDaClasse p = (NomeDaClasse)obj; return (this.Atributo == p.Atributo); } }
Lembrando que onde o código compara os dois atributos, você deveria usar os seus critérios de comparação, ok?
Você também pode utilizar o Intersect, que vai pegar apenas o objeto em comum das suas listas, e criar uma terceira lista. Você pode ler mais sobre ele aqui.
Espero ter ajudado!
- Marcado como Resposta Marcos SJ quinta-feira, 3 de dezembro de 2015 18:53
Todas as Respostas
-
Olá Ferboni,
Você poderia sobrescrever o método Equals do seu objeto. Mais ou menos assim:
public class NomeDaClasse { //... public override bool Equals(object obj) { if (obj == null || obj.GetType() != typeof(NomeDaClasse)) return false; NomeDaClasse p = (NomeDaClasse)obj; return (this.Atributo == p.Atributo); } }
Lembrando que onde o código compara os dois atributos, você deveria usar os seus critérios de comparação, ok?
Você também pode utilizar o Intersect, que vai pegar apenas o objeto em comum das suas listas, e criar uma terceira lista. Você pode ler mais sobre ele aqui.
Espero ter ajudado!
- Marcado como Resposta Marcos SJ quinta-feira, 3 de dezembro de 2015 18:53
-
Boa tarde.
Com LINQ essa tarefa fica bastante simples:
List<NomeDaClasse> lstRepetidos = lstObjetos1.Where(x => lstObjetos2.Any(y => y == x) && lstObjetos3.Any(y => y == x)).ToList();
Assim tu terás uma lista com todos objetos que se repetem nas 3 listas.Att., Rafael Simor
-
-
-
Exato.
Eu tenho uma lista de objetos que contem todos os objetos de todas as listas.
Tenho que comparar cada objeto dessa lista de objetos de todas as listas com cada objeto de cada lista, afim de encontrar um que seja comum em todas as listas.
-
Bom, tu podes fazer o seguinte (pseudo-código):
List<NomeDaClasse> lstRepetidos = lstListas[0]; for (int i = 0; i < lstListas.Count()-1; i++) { lstRepetidos = lstListas[i].Where(x => lstListas[i+1].Any(y => y == x)).ToList(); }
Onde o "lstListas" seria tua lista de listas. Ao final do for terás somente os itens que se repetem em todas listas.
Att., Rafael Simor