Trier une hashtable pour trouver le plus grand indic

dirthangel Messages postés 19 Date d'inscription lundi 5 mai 2003 Statut Membre Dernière intervention 19 juin 2007 - 14 juin 2007 à 21:42
dirthangel Messages postés 19 Date d'inscription lundi 5 mai 2003 Statut Membre Dernière intervention 19 juin 2007 - 16 juin 2007 à 19:28
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

plop3000 Messages postés 135 Date d'inscription mercredi 23 mai 2007 Statut Membre Dernière intervention 7 avril 2012 1
15 juin 2007 à 09:43
Bonjour,

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

Bonne journée
0
dirthangel Messages postés 19 Date d'inscription lundi 5 mai 2003 Statut Membre Dernière intervention 19 juin 2007
16 juin 2007 à 19:03
J'ai pas compris comment utiliser : public virtual void Sort(IComparer);
0
dirthangel Messages postés 19 Date d'inscription lundi 5 mai 2003 Statut Membre Dernière intervention 19 juin 2007
16 juin 2007 à 19:28
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 :)
0
Rejoignez-nous