Trier une liste [Résolu]

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

Votre réponse

4 réponses

Meilleure réponse
ed73 276 Messages postés lundi 8 septembre 2008Date d'inscription 15 avril 2013 Dernière intervention - 4 avril 2011 à 11:14
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)

Merci ed73 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de ed73
Meilleure réponse
LUDINSKI 441 Messages postés mardi 2 décembre 2003Date d'inscription 22 mai 2012 Dernière intervention - 9 avril 2011 à 12:03
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 ;)

Merci LUDINSKI 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de LUDINSKI
Bentouate 12 Messages postés mercredi 16 septembre 2009Date d'inscription 16 avril 2011 Dernière intervention - 3 avril 2011 à 13:31
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
Bentouate 12 Messages postés mercredi 16 septembre 2009Date d'inscription 16 avril 2011 Dernière intervention - 9 avril 2011 à 12:39
0
Merci
Merci à vous deux ! ça fonctionne ! :D
Commenter la réponse de Bentouate

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.