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

Windows Forms Discussion :

Trier une hashtable par valeur afin d'obtenir la clef ayant la grande valeur


Sujet :

Windows Forms

  1. #1
    Membre actif Avatar de mobscene
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 331
    Points : 234
    Points
    234
    Par défaut Trier une hashtable par valeur afin d'obtenir la clef ayant la grande valeur
    salut a tous je porte un de mes scripts perl en C#, celui-ci est destiné a comparer un texte ( sous forme de trigramme ) aves des dictionnaires de trigrammes afin de déterminer la langue du document .

    Mon problème en C# vient du fait que je ne sais pas comment trier ma hashtable finale rangé par ( langue, valeur (int)), retourner la langue ayant le plus grand score, néanmoins il peut arriver sur deux langues soit a égélité auquel cas la première qui tombe sous le main de l'algo est renvoyé.

    En perl j'utilise l'excellent module List::Util plus précisement la fonction réduce, afin de déterminer qu'elle langue a gagner.

    mon code C# est le suivant


    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
          public string compare_profiles(string content)
            {
                Hashtable res = new Hashtable();
                int incr = 0;
     
                string min = content.ToLower();
                string[] doc_ngrams = ngram.GenerateNGrams(min, 3);
     
                IDictionaryEnumerator enumerator = dictionnaries.GetEnumerator();
     
                while (enumerator.MoveNext())
                {
                   string key = enumerator.Value.ToString();
                   Hashtable hash = (Hashtable)dictionnaries[key];
     
                    foreach (string key2 in doc_ngrams)
                    {
                        if ( hash.ContainsKey(key2) )
                        {
                          incr++;
                        }
                    }
                    res.Add(incr, key);
                    incr = 0;
                }
     
               // ?????? Comment faire ?
     
     
            }


    et mon code perl !



    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
    package Text::LanguageDetermine;
    use List::Util qw/reduce/;
     
    sub new
    {
      my $class = shift;
      my $dicos = shift;
      return bless {
         Dic => $dicos
      }, $class;
    }
     
     
    sub set_dicos
    {
       my $self = shift;
       my $dico = shift;
       $self->{'Dic'} = $dico;
    }
     
    sub compare_profiles
    {
      my $self = shift;
      my $text = shift;
      my $count = 0;
      my %cnt_by_dico;
     
      foreach my $dic ( keys %{$self->{'Dic'}} )
      {
        foreach my $one ( keys %$text )
    	  {
    	      $count++ if exists $hook->{$dic}{$one};
    	  }
    	  $cnt_by_dico{$dic} = $count;
    	  $count = 0;
      }
       return reduce {  $cnt_by_dico{$a} > $cnt_by_dico{$b} ? $a : $b } (sort keys %$hook);
    }
     
     
    1;
     
    __END__

    merci a vous
    Everybody have in their the potential to be their own god : Marilyn Manson

  2. #2
    Membre actif Avatar de mobscene
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 331
    Points : 234
    Points
    234
    Par défaut
    J'ai essayé avec une sortedlist mais mon code plante car il arrive que deux langues soit a équivalence
    Everybody have in their the potential to be their own god : Marilyn Manson

Discussions similaires

  1. [Collection] Trier une Hashmap par valeur
    Par aelmalki dans le forum Collection et Stream
    Réponses: 10
    Dernier message: 16/07/2009, 18h08
  2. trier une hashtable selon les valeurs
    Par Raylemon dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 20/06/2007, 11h44
  3. Trier une colonne par date
    Par foobar42 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 11/07/2006, 17h46
  4. Remplacer une Hashtable par une HashMap
    Par scolyo dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 19/06/2006, 17h30
  5. [C#] Trier une Hashtable par les valeurs
    Par Joad dans le forum ASP.NET
    Réponses: 4
    Dernier message: 25/04/2005, 16h29

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