none
Supprimer les doublons d'une liste

    Question

  • Bonjour,

    J'ai une liste d'objet déclarée dans un classe qui implémente IEQuatable et pour laquelle j'ai implanté les procédures Equals et GetHashCode.

    Pour supprimer les doublons j'ai essayé le code suivant:

    var liste = Maliste.GroupBy(c => c.City + c.CityGeoCode + c.County + c.Region + c.Country).Select(c => c.First();

    Mais cela ne marche pas , j'ai le même nombre d'enregistrements.

    Merci pour votre aide.

    Bernard


    Bernard Bouree

    samedi 26 août 2017 14:40

Réponses

  • Bonjour Bernard,

    Voici une solution : 

        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            List<ToponymesGeo> LstToponymesGeo = new List<ToponymesGeo>();
    
            public MainWindow()
            {
                InitializeComponent();
    
                var liste = ListeToponymesGeoDB().ToLookup(p => p.City + p.CityGeoCode + p.Country + p.County + p.Region).Select(c=>c.First());
    
                foreach (ToponymesGeo item in liste)
                {
                    LstToponymesGeo.Add(item);
                }
                
            }
    
            private List<ToponymesGeo> ListeToponymesGeoDB()
            {
                List<ToponymesGeo> ToponymesGeo = new List<ToponymesGeo>
                {
                    new ToponymesGeo
                    {
                        City="Paris",
                        CityGeoCode="Code 1",
                        Country="France",
                        County="County",
                        Region="Region"
                    },
    
                    new ToponymesGeo
                    {
                        City = "Lyon",
                        CityGeoCode = "Code 2",
                        Country = "France",
                        County = "County",
                        Region = "Region 2"
                    },
    
                    new ToponymesGeo
                    {
                        City = "Paris",
                        CityGeoCode = "Code 1",
                        Country = "France",
                        County = "County",
                        Region = "Region"
                    },
    
                    new ToponymesGeo
                    {
                        City = "Paris",
                        CityGeoCode = "Code 3",
                        Country = "France",
                        County = "County 3",
                        Region = "Region"
                    }
                };
    
    
                return ToponymesGeo;
            }
        }

    J'espère que j'ai bien répondu à votre question.


    Si c'est le cas, n'hésitez pas à mettre ma réponse en réponse à votre post

    Vous pouvez me suivre sur Twitter : https://twitter.com/NordineMhoumadi


    Download my NEW FREE application MCP PREPARATION in the Windows 10 Store for preparing your Microsoft Certification or test your skills in Microsoft Technologies;


    mardi 29 août 2017 09:29

Toutes les réponses

  • J'ai essayé également

           IEnumerable<ToponymeGeoDb> liste2 = ListeToponymesGeoDB.Distinct().ToList();

    Mais sans succès

    Bernard


    Bernard Bouree

    samedi 26 août 2017 14:48
  • Bonjour

     IEnumerable<ToponymeGeoDb> liste = ToponymeGeoDb.ListeToponymesGeoDB.Distinct();

    En lisant la doc sur le web j'ai mis en place les choses suivantes:

    Implanter IEQuatable dans ma class

    Implanter Equals() et GetHashCode()

    Sans succès.

    J'ai placé un arrêt au début de mes deux fonctions mais en debugant le programme semble jamais passé par là ?

     public bool Equals(ToponymeGeoDb other)
            {
                if (ReferenceEquals(null, other)) return false;
                if (ReferenceEquals(this, other)) return true;
                return City.Equals(other.City) && CityGeoCode.Equals(other.CityGeoCode);
            }
            public override bool Equals(object obj)
            {
                if (ReferenceEquals(null, obj)) return false;
                if (ReferenceEquals(this, obj)) return true;
                if (obj.GetType() != this.GetType()) return false;
                return Equals((ToponymeGeoDb)obj);
            }


    Bernard Bouree

    dimanche 27 août 2017 13:05
  • Bonjour Bernard,

    Voici une solution : 

        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            List<ToponymesGeo> LstToponymesGeo = new List<ToponymesGeo>();
    
            public MainWindow()
            {
                InitializeComponent();
    
                var liste = ListeToponymesGeoDB().ToLookup(p => p.City + p.CityGeoCode + p.Country + p.County + p.Region).Select(c=>c.First());
    
                foreach (ToponymesGeo item in liste)
                {
                    LstToponymesGeo.Add(item);
                }
                
            }
    
            private List<ToponymesGeo> ListeToponymesGeoDB()
            {
                List<ToponymesGeo> ToponymesGeo = new List<ToponymesGeo>
                {
                    new ToponymesGeo
                    {
                        City="Paris",
                        CityGeoCode="Code 1",
                        Country="France",
                        County="County",
                        Region="Region"
                    },
    
                    new ToponymesGeo
                    {
                        City = "Lyon",
                        CityGeoCode = "Code 2",
                        Country = "France",
                        County = "County",
                        Region = "Region 2"
                    },
    
                    new ToponymesGeo
                    {
                        City = "Paris",
                        CityGeoCode = "Code 1",
                        Country = "France",
                        County = "County",
                        Region = "Region"
                    },
    
                    new ToponymesGeo
                    {
                        City = "Paris",
                        CityGeoCode = "Code 3",
                        Country = "France",
                        County = "County 3",
                        Region = "Region"
                    }
                };
    
    
                return ToponymesGeo;
            }
        }

    J'espère que j'ai bien répondu à votre question.


    Si c'est le cas, n'hésitez pas à mettre ma réponse en réponse à votre post

    Vous pouvez me suivre sur Twitter : https://twitter.com/NordineMhoumadi


    Download my NEW FREE application MCP PREPARATION in the Windows 10 Store for preparing your Microsoft Certification or test your skills in Microsoft Technologies;


    mardi 29 août 2017 09:29
  • Bonjour Nourdine

    Super avec une solution simple!

    Merci

    Bernard


    Bernard Bouree

    mardi 29 août 2017 10:01