Trier une liste [Résolu]

Messages postés
12
Date d'inscription
mercredi 16 septembre 2009
Statut
Membre
Dernière intervention
16 avril 2011
- - Dernière réponse : Bentouate
Messages postés
12
Date d'inscription
mercredi 16 septembre 2009
Statut
Membre
Dernière intervention
16 avril 2011
- 9 avril 2011 à 12:39
Bonjour,

J’espère que je me suis pas trompé de section :s je savais pas trop ou poster... voila mon problème:

je n'arrive pas à effectuer un trie sur une structure de donnée sous forme de liste.
Voici mon code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace ConsoleApplication1
{
    public struct voiture
    {
        public string numero;
        public int annee;
        public int marque;
        public string modele;
        public double prix;
    }

    class Program
    {
        static void Main(string[] args)
        {
            int choix = 0;
            List<voiture> liVoiture = new List<voiture>();
            List<string> liMarque = new List<string>();

            while (choix != 10)
            {
                menu();
                Console.WriteLine("Entrer votre choix");
                choix = Int32.Parse(Console.ReadLine());
                switch (choix)
                {
                    case 1: remplir_voit(liVoiture, liMarque);
                        break;
                    case 2: edition_voit(liVoiture, liMarque);
                        break;
                    case 3: trier(ref liVoiture);
                        break;
                }

               
            }
        }

        static public void menu()
        {
            Console.Clear();
            Console.WriteLine("Menu");
            Console.WriteLine(" 1 remplir les tableaux (voitures et constructeurs)");
            Console.WriteLine(" 2 editer les tableaux");
            Console.WriteLine(" 3 tri sur numero des voitures");
            Console.WriteLine(" 4 supprimer une voiture");
            Console.WriteLine(" 5 ajouter une voiture");
            Console.WriteLine(" 6 Recherche une voiture sur son numero");
        }

        public static void remplir_voit(List<voiture> liv, List<string> lim)
        {
            voiture sais_voit;
            sais_voit.numero "1258XD76"; sais_voit.annee 1995;
            sais_voit.marque 1; sais_voit.modele "Saxo"; sais_voit.prix = 3900;
            liv.Add(sais_voit);

            sais_voit.numero "1158ZE76"; sais_voit.annee 2002;
            sais_voit.marque 1; sais_voit.modele "Saxo"; sais_voit.prix = 6800;
            liv.Add(sais_voit);

            sais_voit.numero "2584DR27"; sais_voit.annee 1999;
            sais_voit.marque 0; sais_voit.modele "106"; sais_voit.prix = 5000;
            liv.Add(sais_voit);

            sais_voit.numero "1321XV76"; sais_voit.annee 2002;
            sais_voit.marque 0; sais_voit.modele "206SW"; sais_voit.prix = 16000;
            liv.Add(sais_voit);

            sais_voit.numero "5673DQ27"; sais_voit.annee 1994;
            sais_voit.marque 2; sais_voit.modele "Twingo"; sais_voit.prix = 4500;
            liv.Add(sais_voit);

            sais_voit.numero "8901TR76"; sais_voit.annee 2003;
            sais_voit.marque 2; sais_voit.modele "Megane"; sais_voit.prix = 17000;
            liv.Add(sais_voit);

            sais_voit.numero "3456YT27"; sais_voit.annee 1999;
            sais_voit.marque 0; sais_voit.modele "206"; sais_voit.prix = 9000;
            liv.Add(sais_voit);

            sais_voit.numero "1563HU76"; sais_voit.annee 1994;
            sais_voit.marque 3; sais_voit.modele "Panda"; sais_voit.prix = 3500;
            liv.Add(sais_voit);


            lim.Add("Peugeot"); lim.Add("Citroen"); lim.Add("Renault"); lim.Add("Fiat");
            lim.Add("Opel"); lim.Add("Toyota");
        }

        public static void edition_voit(List<voiture> liv, List<string> lim)

        {

             Console.WriteLine("Numero   année  Marque modele    prix ");
             foreach (voiture v in liv)
             {
                 Console.WriteLine(v.numero + " " + v.annee + "   " + lim[v.marque] + " " + v.modele + "   " + v.prix);
             }
             Console.ReadKey();
         }

        public static void trier(ref List<voiture> liv)
        {
            liv.Sort(); // c'est ici que sa cloche !
            
        }
    }
}





A chaque fois j'ai "Impossible de comparer deux éléments dans le tableau." J'ai commenté l'endroit ou ça plante(sur la procédure trier).

Merci de votre aide !
Afficher la suite 

4 réponses

Meilleure réponse
Messages postés
276
Date d'inscription
lundi 8 septembre 2008
Statut
Membre
Dernière intervention
15 avril 2013
2
3
Merci
Bonjour

Il faut indiquer à la fonction Sort() sur quoi doit porter le tri. Pour cela, utilise un objet IComparer, un delegate ou encore une expression lambda, ou bien déclare ton objet voiture en utilisant l'interface IComparable et implémente la méthode CompareTo(object obj)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 190 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ed73
Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
6
3
Merci
Bonjour,

Soit, l'appel de la méthode Sort() :

liv.Sort( new Comparison<voiture>( CompareVoiture ) );



et la méthode de trie :

private int CompareVoiture( voiture v1, voiture v2 )
{
    return string.Compare( v1.numero, v2.numero );
}


Bonne continuation ;)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 190 internautes nous ont dit merci ce mois-ci

Commenter la réponse de LUDINSKI
Messages postés
12
Date d'inscription
mercredi 16 septembre 2009
Statut
Membre
Dernière intervention
16 avril 2011
0
Merci
Personne à une toute petite idée ? Est-ce que c'est possible au moins ce que je veux faire ? xD
Commenter la réponse de Bentouate
Messages postés
12
Date d'inscription
mercredi 16 septembre 2009
Statut
Membre
Dernière intervention
16 avril 2011
0
Merci
Merci à vous deux ! ça fonctionne ! :D
Commenter la réponse de Bentouate