Trier une liste

Résolu
Bentouate Messages postés 12 Date d'inscription mercredi 16 septembre 2009 Statut Membre Dernière intervention 16 avril 2011 - 2 avril 2011 à 22:52
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 !

4 réponses

ed73 Messages postés 276 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 15 avril 2013 2
4 avril 2011 à 11:14
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)
3
LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 8
9 avril 2011 à 12:03
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 ;)
3
Bentouate Messages postés 12 Date d'inscription mercredi 16 septembre 2009 Statut Membre Dernière intervention 16 avril 2011
3 avril 2011 à 13:31
Personne à une toute petite idée ? Est-ce que c'est possible au moins ce que je veux faire ? xD
0
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
Merci à vous deux ! ça fonctionne ! :D
0
Rejoignez-nous