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# :
publicstring compare_profiles(string content){
Hashtable res = newHashtable();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