Ir para o conteúdo
Leudassdf

Devolver valores distintos de uma Lista de Listas

Mensagens Recomendadas

Leudassdf

Boas pessoal,

Eu atualmente tenho uma

 List<List<POI>> LP;

O POI é um objecto, criado por mim, através de uma classe. Apenas contêm uma

List<String>

O que eu quero fazer é apenas retornar os valores, linhas, distintos da Lista de Listas LP

Alguém me pode ajudar com isto?

Cumprimentos,

Leandro

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Se percebi bem, queres as List<POI> distintas.

foreach (List<POI> poilist in LP.Distinct())
   Console.WriteLine(poilist.GetHashCode());

Se a tua POI não implementar o interface Equatable, a coisa pode não correr bem.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Leudassdf

Se percebi bem, queres as List<POI> distintas.

foreach (List<POI> poilist in LP.Distinct())
Console.WriteLine(poilist.GetHashCode());

Se a tua POI não implementar o interface Equatable, a coisa pode não correr bem.

Antes de mais obrigado pela resposta.

Essa solução não funciona. Ele não distingue os dados.

A minha classe POI está assim:

 public class POI : IEquatable<POI>

A minha lista de listas tem algo deste género:

1 2 3 4

2 3 5 6

1 2 3 4

Eu queria remover a ultima linha de dados

Editado por Leudassdf

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

O Distinct "distingue" os dados, acredita.

Só precisas de implementar correctamente a Equatable, senão não é possível determinar o que é um POI igual.

Antes de te responder, fiz um pequeno teste:

   class POI
   {
       public List<string> a { get; set; }

       public POI() {
           a = new List<string>();
           Random r = new Random(DateTime.Now.Millisecond);
           for (int i = 1; i < r.Next(1, 30); i++)
               a.Add(r.Next(1, 999).ToString());
       }
   }

   class Program
   {
       static void Main(string[] args)
       {
           List<List<POI>> LP = new List<List<POI>>();

           List<POI> lista1 = new List<POI>() { new POI(), new POI() };
           List<POI> lista2 = new List<POI>() { new POI(), new POI() };
           List<POI> lista3 = new List<POI>() { new POI(), new POI() };

           LP.Add(lista1);
           LP.Add(lista1);
           LP.Add(lista3);

           foreach (List<POI> poilist in LP.Distinct())
               Console.WriteLine(poilist.GetHashCode());

           Console.Read();

       }
   }

A POI preenche a sua lista com um número aleatório de números aleatórios, para garantir que são "estatisticamente provavelmente diferentes".

Só apresenta dois hashcodes, porque adicionei duas vezes a lista 1.

Se adicionares a lista2, apresenta 3 hashcodes.

Se adicionares só a lista1 um milhão de vezes, apresenta-te um hashcode apenas.

Neste exemplo corre bem porque a hash da POI está a ser calculada com a hash da lista de um primitivo, mas no teu caso eu não sei o que a tua POI implementa, nem como implementa.

Pode é acontecer estares a querer referir-te à distinção de outro set de dados, mas este vai de facto eliminar as List<POI> repetidas.

Em que teste te baseaste para dizer que não funciona?


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.