Je ne sais pas pourquoi vous voulez la réponse finale soit sous cette forme étrange (par opposition à un hachage de clés uniques/valeurs et une hachage value => count correspondances, mais ici vous allez ...
vous pouvez également utiliser% compte hachage directement au lieu de pousser les valeurs dans un tableau que vous vouliez ci-dessus.
use strict;
use Data::Dumper;
my %hash = (key1 => "one", key2 => "two", key3 => "three", key4 => "two", key5 => "one");
my %counts =();
my @counts =();
my %unique =();
foreach my $key (sort keys %hash) {
my $value = $hash{$key};
if (not exists $counts{$value}) {
$unique{$key} = $value;
}
$counts{$value}++;
};
my @unique_keys = sort keys %unique; # Fix the sorting to your desired one
# if default is not what you meant
# You can also use %counts hash directly
#instead of pushing values into an array as you wanted above.
foreach my $key (@unique_keys) {
push @counts, $counts{ $unique{$key} }
};
# Print
print Data::Dumper->Dump([\@unique_keys, \@counts, \%unique],
["unique_keys", "counts", "unique"]) ;
Résultats:
$unique_keys = [
'key1',
'key2',
'key3'
];
$counts = [
2,
2,
1
];
$unique = {
'key2' => 'two',
'key1' => 'one',
'key3' => 'three'
};
ne signifie "clé/valeur unique" la clé ou la valeur doit être unique, ou la combinaison de clé et de valeur doit être unique, ou juste la clé doit être unique? – ysth
Quelle commande assumez-vous pour @ array2. En d'autres termes, pourquoi le compte pour «un» vient avant le compte pour «deux»? – toolkit
Qu'est ce qui détermine quelles clés sont conservées? Ne dites pas de commande car l'ordre dans lequel les clés sont renvoyées n'est pas le même pour les différents perl et ce n'est pas la même chose que l'ordre donné dans le fichier source. –