Trier une hashtable pour trouver le plus grand indic

Signaler
Messages postés
19
Date d'inscription
lundi 5 mai 2003
Statut
Membre
Dernière intervention
19 juin 2007
-
Messages postés
19
Date d'inscription
lundi 5 mai 2003
Statut
Membre
Dernière intervention
19 juin 2007
-
salut a tous je porte de nouveau du code perl en C# j'ai porter 99% du code mais un problème subsiste a la fin de mon programme j'ai une hashtable rangé comme cela :

clef,valeur :  langue,indice

ma question est comment faire pour trier la hashtable par valeur afin de trouver la langue ayant le plus grand indice de plus il peut arriver que deux langues ais le meme score a ce moment la dans mon code perl c'est la première des deux qui est renvoyé par le programme.

voici mon code C# :

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(key, incr);

incr = 0;

}
 ?????

}

et mon coder Perl :

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 encore de votre aide

3 réponses

Messages postés
135
Date d'inscription
mercredi 23 mai 2007
Statut
Membre
Dernière intervention
7 avril 2012
1
Bonjour,

voici un lien qui pourrait t'aider : http://www.developpez.net/forums/archive/index.php/t-32675.html

Bonne journée
Messages postés
19
Date d'inscription
lundi 5 mai 2003
Statut
Membre
Dernière intervention
19 juin 2007

J'ai pas compris comment utiliser : public virtual void Sort(IComparer);
Messages postés
19
Date d'inscription
lundi 5 mai 2003
Statut
Membre
Dernière intervention
19 juin 2007

Dotnet est vraiment lourd pour sa, c'est pourtant pas la mort de trier une hastable ne perl, python php, etc... généralement c'est limpide mais la c'est vraiment crade :s

pour faire ce que je veux en perl je peut faire sa
my %h ( 1> 'b', 0 => 'g', 2 => 'c', 0 => 'a' );


my @t = map { $h{$_} } sort { $a <=> $b } keys (%h);


print $t[0], "\n";

la fonction sort() est celle de C :)