[Perl] et oui encore du Perl ! rangement hash
Résolu
kij_82
Messages postés
4089
Date d'inscription
Statut
Contributeur
Dernière intervention
-
Lamadamme Messages postés 4 Date d'inscription Statut Membre Dernière intervention -
Lamadamme Messages postés 4 Date d'inscription Statut Membre Dernière intervention -
Une petite question qui souleve un lourd débat dans un autre forum et qui me pose probleme :
Comment fait on pour ranger un hash dans un ordre précis, car si on y met des valeurs à l'aide d'un boucle, de manière automatique, le hash met ces valeur un peu ou ca l'arrange, et donc quand on veut relire les données contenu dans le hash une à une, celle-ci ne sont plus dans l'ordre.
Je sais que fondamentalement, un hash est anarchique mais n'y a t il pas une solution à ce problème ?
merci de votre participation.
++
Comment fait on pour ranger un hash dans un ordre précis, car si on y met des valeurs à l'aide d'un boucle, de manière automatique, le hash met ces valeur un peu ou ca l'arrange, et donc quand on veut relire les données contenu dans le hash une à une, celle-ci ne sont plus dans l'ordre.
Je sais que fondamentalement, un hash est anarchique mais n'y a t il pas une solution à ce problème ?
merci de votre participation.
++
A voir également:
- [Perl] et oui encore du Perl ! rangement hash
- Denon perl pro test - Accueil - Audio
- Active perl - Télécharger - Édition & Programmation
- Oui transfert gratuit - Guide
- Formule =si oui ou non excel - Guide
- Excel compter le nombre de oui ✓ - Forum Excel
11 réponses
Salut tout le monde.
Je bien le sais que la dernier réponse était le 2005, mais peut être ça peut aider une autre personne.
Alors, si tu veux trier un hashage, tu peut definir l'ordre dans un table et imprimer selon ce table.
Par exemple:
$i=0;
@ord = qw/ 1 5 4 6 2 8 3/;
foreach $cle (keys %Hash) {
if ($cle eq $ord[$i]) {
print " $cle $Hash{$cle}\n";
$i++;
}
}
On doit être sure que tous les valeurs de @ord sont aussi dans %Hash.
Est-ce que vous avez une autre sugestion??
A+
Je bien le sais que la dernier réponse était le 2005, mais peut être ça peut aider une autre personne.
Alors, si tu veux trier un hashage, tu peut definir l'ordre dans un table et imprimer selon ce table.
Par exemple:
$i=0;
@ord = qw/ 1 5 4 6 2 8 3/;
foreach $cle (keys %Hash) {
if ($cle eq $ord[$i]) {
print " $cle $Hash{$cle}\n";
$i++;
}
}
On doit être sure que tous les valeurs de @ord sont aussi dans %Hash.
Est-ce que vous avez une autre sugestion??
A+
Vous lez voulez dans quel ordre ? Alphabétique ?
Avez vous un bout de code et/ou de ce que voulez faire ?
Ca serait plus facile pour vous aider :-)
Bzozo
Avez vous un bout de code et/ou de ce que voulez faire ?
Ca serait plus facile pour vous aider :-)
Bzozo
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonsoir,
Perl stocke les paires clé-valeur d'un hachage selon un ordre interne particulier. Ainsi, il ne doit pas toutes les parcourir quand il doit en trouver une. Cet ordre ne peut pas être contrôlé.
@+
Perl stocke les paires clé-valeur d'un hachage selon un ordre interne particulier. Ainsi, il ne doit pas toutes les parcourir quand il doit en trouver une. Cet ordre ne peut pas être contrôlé.
@+
Salut à tout le monde,
Voilà un petit pasage de livre
"Introduction à Perl" par Randal L. Schwartz & Tom Phoenix Edition O'Reilly (3ème édition) - novembre 2002.
START
"
Nous voulons afficher la liste de façon ordonnée en commençant par le gagnant; nous devons donc trier le hachage par score:
my %score= ( "barney" => 195, "fred" => 205, "dino" => 30);
my @gagnants = sort par_score keys %score;
Naturellement, nous n'allons pas pouvoir trier le hachage par score; il ne s'agit que d'un raccourci verbal. Il n'est pas possible de trier un hachage!.......................................................................................................................
sub par_score { $score{$b} <=> $score{$a} }
..............
"
FIN
On peut écrire
foreach $cle (sort keys %HASH {
print $cle, '=', $HASH{$cle}, "\n";
}
A+
Voilà un petit pasage de livre
"Introduction à Perl" par Randal L. Schwartz & Tom Phoenix Edition O'Reilly (3ème édition) - novembre 2002.
START
"
Nous voulons afficher la liste de façon ordonnée en commençant par le gagnant; nous devons donc trier le hachage par score:
my %score= ( "barney" => 195, "fred" => 205, "dino" => 30);
my @gagnants = sort par_score keys %score;
Naturellement, nous n'allons pas pouvoir trier le hachage par score; il ne s'agit que d'un raccourci verbal. Il n'est pas possible de trier un hachage!.......................................................................................................................
sub par_score { $score{$b} <=> $score{$a} }
..............
"
FIN
On peut écrire
foreach $cle (sort keys %HASH {
print $cle, '=', $HASH{$cle}, "\n";
}
A+
Ben finalement c'est bon, je me suit rabatu sur un tableau de tableau au lieu d'un tableau de hashs...
merci de votre attention
:)
++
merci de votre attention
:)
++
Bah non!
Ce n'est pas ordonné! L'ordre qu'on veut c'est celle de @ord = qw/ 1 5 4 6 2 8 3/;
On veut simplement imprimer le hashage selon @ord.
Dans ce cas là, ça fonctionne:
print "$_ $hash{$_}\n" for @ord;
On ne veut pas utiliser 'sort' puor ne pas modifier @ord.
C'est comme une Course de chevaux. Le premier est le cheval numéro 1, le seconde est le cheval numéro 5, le troisiéme est le 4, le quatriéme est le 6,...
[]'s
Ce n'est pas ordonné! L'ordre qu'on veut c'est celle de @ord = qw/ 1 5 4 6 2 8 3/;
On veut simplement imprimer le hashage selon @ord.
Dans ce cas là, ça fonctionne:
print "$_ $hash{$_}\n" for @ord;
On ne veut pas utiliser 'sort' puor ne pas modifier @ord.
C'est comme une Course de chevaux. Le premier est le cheval numéro 1, le seconde est le cheval numéro 5, le troisiéme est le 4, le quatriéme est le 6,...
[]'s
Salut,
@ord = qw/ 1 5 4 6 2 8 3/;
$Hash{$numero_cheval} = $nom_cheval;
Ou même le contraire: $Hash{$nom_cheval} = $numero_cheval;
Peu importe, le cas est trier par l'ordre que j'avais choisi. ;)
[]'s
@ord = qw/ 1 5 4 6 2 8 3/;
$Hash{$numero_cheval} = $nom_cheval;
Ou même le contraire: $Hash{$nom_cheval} = $numero_cheval;
Peu importe, le cas est trier par l'ordre que j'avais choisi. ;)
[]'s
Re,
Oui j'ai compris ce que tu voulais dire, mais le message initial demande un tri par valeur et pas une ordre spécifié.
le hash met ces valeur un peu ou ca l'arrange, et donc quand on veut relire les données contenu dans le hash une à une, celle-ci ne sont plus dans l'ordre.
D'ailleurs à mon tour j'ai mal compris et j'ai donné une mauvaise référence en 2005.
Dans son cas il faut faire un tri sur values %h
En ce qui concerne ton exemple qui n'est pas faux, j'ai mal compris au début ;-)
En ce qui concerne l'affichage on peut aussi faire quelque chose comme ça, mais comme tu le dis il faut s'assurer de l'existence des clés dans le hash
Dans ce cas là, ça fonctionne:
print "$_ $hash{$_}\n" for @ord;
En revanche dans ce cas on peut utiliser exists pour s'assurer que les éléments de @ord sont des clés dans %hash
J'aurais du commencé avec "Soit bienvenue sur CCM" ;-)
Oui j'ai compris ce que tu voulais dire, mais le message initial demande un tri par valeur et pas une ordre spécifié.
le hash met ces valeur un peu ou ca l'arrange, et donc quand on veut relire les données contenu dans le hash une à une, celle-ci ne sont plus dans l'ordre.
D'ailleurs à mon tour j'ai mal compris et j'ai donné une mauvaise référence en 2005.
Dans son cas il faut faire un tri sur values %h
En ce qui concerne ton exemple qui n'est pas faux, j'ai mal compris au début ;-)
En ce qui concerne l'affichage on peut aussi faire quelque chose comme ça, mais comme tu le dis il faut s'assurer de l'existence des clés dans le hash
print "$_\n" for(@h{@ord});
Dans ce cas là, ça fonctionne:
print "$_ $hash{$_}\n" for @ord;
En revanche dans ce cas on peut utiliser exists pour s'assurer que les éléments de @ord sont des clés dans %hash
for (@ord){ print "$_ $hash{$_}\n" if (exists $hash{$_}); }
J'aurais du commencé avec "Soit bienvenue sur CCM" ;-)
Ton tableau n'est pas ordonné;-)
On doit être sure que tous les valeurs de @ord sont aussi dans %Hash.
Autant utiliser keys %hash pour être sûr
Est-ce que vous avez une autre sugestion??
Ce ne sont pas les façons de faire qui manquent à Perl ;-)
ou ou ou