IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Trie dans un tableau 2D


Sujet :

ASP.NET

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 249
    Par défaut Trie dans un tableau 2D
    Bonjour à tous,

    Je m'attaque pour la première fois à l'utilisation d'un tableau 2D, qui semble approprié pour ce que je veut faire.

    Je me suis fait une page de test pour comprendre le fonctionnement. Voici ma question :

    J'ai un label Label1. Le page_load de ma page est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
        protected void Page_Load(object sender, EventArgs e)
        {
            double[,] Tableau = new double[3, 3];
     
            for (int i = 0; i < Tableau.GetLongLength(1); i++)
            {
                Tableau[0, i] = double.Parse((5-i).ToString());
                Tableau[1, i] = double.Parse((5 - (i + 1)).ToString());
            }
     
            // ici je souhaiterai trier la première colonne de mon tableau dans l'ordre croissant
     
            for (int i = 0; i < Tableau.GetLongLength(1); i++)
            {
                Label1.Text += (Tableau[0, i] + " " + Tableau[1, i]) + "<br>";
            }
        }
    Ce qui me renvoit donc dans le Label :

    5 4
    4 3
    3 2


    Ce qui est normal.

    Ma question : Comment trier le tableau, de telle sorte que la première colonne (5;4;3) soit dans l'ordre croissant (3;4;5), tout en gardant la correspondance avec la deuxième colonne (le chiffre de la colonne 2 doit rester "accroché" à celui de la colonne 1).

    En gros, après avoir trié dans ma page le tableau à l'endroit indiqué ci-dessus, je souhaiterai avoir en sortie :

    3 2
    4 3
    5 4


    Merci d'avance,

    FoxDeltaSierra

  2. #2
    Membre chevronné
    Inscrit en
    Décembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Décembre 2008
    Messages : 256
    Par défaut
    Citation Envoyé par FoxDeltaSierra Voir le message
    Je m'attaque pour la première fois à l'utilisation d'un tableau 2D, qui semble approprié pour ce que je veut faire.
    Pas tant que ça :-(
    Les tableaux n'offrent rien pour trier leur contenu. Tu devrais regarder du côté des collections, peut-être un Dictionnary<int, int> dans ton cas.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 249
    Par défaut
    Oui effectivement c'est parfait ! Merci. Par contre il a fallu que je trie suivant la valeur, et non la clef comme dans un SortedDictionnary.

    Donc pour ceux qui auraient le même problème que moi, j'ai trouvé une procédure sur :

    http://itbyz.blogspot.com/2008/07/ne...nary-sort.html

    que j'ai un petit peu modifié pour inverser l'ordre de tri (ASC ou DESC). Cela fonctionne parfaitement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    using System;
    using System.Collections;
    using System.Configuration;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;
    using System.Collections.Generic;
     
    public partial class essai : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            SortableDictionary<string, double> MonDictionnaire = new SortableDictionary<string, double>();
     
            MonDictionnaire.Add("2", 2.26);
            MonDictionnaire.Add("1", 23.21);
            MonDictionnaire.Add("3", 2.8);
     
            MonDictionnaire.SortAndReverse();
     
            foreach (KeyValuePair<string, double> heure in MonDictionnaire)
            {
                Label1.Text += heure.Key + " " + MonDictionnaire[heure.Key] + "<br>";
            }
        }
     
        public class SortableDictionary<TKey, TValue> : Dictionary<TKey, TValue>
     
            where TValue : IComparable
        {
            // Sorting
            public void Sort()
            {
                // Copy the dictionary data to a List
                List<KeyValuePair<TKey, TValue>> sortedList = new List<KeyValuePair<TKey, TValue>>(this);
                // Use the List's Sort method, and make sure we are comparing Values.
                sortedList.Sort(
                delegate(KeyValuePair<TKey, TValue> first, KeyValuePair<TKey, TValue> second) { return first.Value.CompareTo(second.Value); }
                );
     
                // Clear the dictionary and repopulate it from the List
                this.Clear();
                foreach (KeyValuePair<TKey, TValue> kvp in sortedList)
                    this.Add(kvp.Key, kvp.Value);
            }
     
            public void SortAndReverse()
            {
                // Copy the dictionary data to a List
                List<KeyValuePair<TKey, TValue>> sortedList = new List<KeyValuePair<TKey, TValue>>(this);
                // Use the List's Sort method, and make sure we are comparing Values.
                sortedList.Sort(
                delegate(KeyValuePair<TKey, TValue> first, KeyValuePair<TKey, TValue> second) { return first.Value.CompareTo(second.Value); }
                );
                sortedList.Reverse();
                // Clear the dictionary and repopulate it from the List
                this.Clear();
                foreach (KeyValuePair<TKey, TValue> kvp in sortedList)
                    this.Add(kvp.Key, kvp.Value);
            }
        }
    }
    Un MonDictionnaire.SortAndReverse(); renvoie
    1 23,21
    3 2,8
    2 2,26

    Un MonDictionnaire.Sort(); renvoie :
    2 2,26
    3 2,8
    1 23,21

    Merci Gold Bug pour ton aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. trie d'un tableau dans un foreach
    Par thomix68 dans le forum Langage
    Réponses: 8
    Dernier message: 23/11/2012, 12h55
  2. Réponses: 1
    Dernier message: 06/09/2009, 09h11
  3. perte de données dans un tableau lors d'un trie
    Par demanghonj dans le forum JSF
    Réponses: 2
    Dernier message: 20/03/2009, 15h29
  4. trie d'un tableau bidimentionnel d'entier dans java
    Par la_reine dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 09/05/2008, 19h29
  5. verification de doublons dans un tableau
    Par bohemianvirtual dans le forum C
    Réponses: 11
    Dernier message: 25/05/2002, 12h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo