Bonjour,
J'aurais une petite question concernant les hashages :
Soit un hash :
$a = {};
$a->{'val1'}->{'unit1'} = 5;
$a->{'val1'}->{'unit2'} = 1;
$a->{'val1'}->{'unit3'} = 8;
Y aurait-il moyen de lire les éléments de ce hash en les triant selon
la valeurs des 'unit', afin d'avoir en sortie :
val1 unit2 1
val1 unit1 5
val1 unit3 8
Bonjour,
J'aurais une petite question concernant les hashages :
Soit un hash :
$a = {};
$a->{'val1'}->{'unit1'} = 5;
$a->{'val1'}->{'unit2'} = 1;
$a->{'val1'}->{'unit3'} = 8;
Y aurait-il moyen de lire les éléments de ce hash en les triant selon
la valeurs des 'unit', afin d'avoir en sortie :
val1 unit2 1
val1 unit1 5
val1 unit3 8
Bonjour,
J'aurais une petite question concernant les hashages :
Soit un hash :
$a = {};
$a->{'val1'}->{'unit1'} = 5;
$a->{'val1'}->{'unit2'} = 1;
$a->{'val1'}->{'unit3'} = 8;
Y aurait-il moyen de lire les éléments de ce hash en les triant selon
la valeurs des 'unit', afin d'avoir en sortie :
val1 unit2 1
val1 unit1 5
val1 unit3 8
J'aurais une petite question concernant les hashages :
Soit un hash :
$a = {};
$a->{'val1'}->{'unit1'} = 5;
$a->{'val1'}->{'unit2'} = 1;
$a->{'val1'}->{'unit3'} = 8;
Y aurait-il moyen de lire les éléments de ce hash en les triant selon
la valeurs des 'unit', afin d'avoir en sortie :
val1 unit2 1
val1 unit1 5
val1 unit3 8
J'aurais une petite question concernant les hashages :
Soit un hash :
$a = {};
$a->{'val1'}->{'unit1'} = 5;
$a->{'val1'}->{'unit2'} = 1;
$a->{'val1'}->{'unit3'} = 8;
Y aurait-il moyen de lire les éléments de ce hash en les triant selon
la valeurs des 'unit', afin d'avoir en sortie :
val1 unit2 1
val1 unit1 5
val1 unit3 8
J'aurais une petite question concernant les hashages :
Soit un hash :
$a = {};
$a->{'val1'}->{'unit1'} = 5;
$a->{'val1'}->{'unit2'} = 1;
$a->{'val1'}->{'unit3'} = 8;
Y aurait-il moyen de lire les éléments de ce hash en les triant selon
la valeurs des 'unit', afin d'avoir en sortie :
val1 unit2 1
val1 unit1 5
val1 unit3 8
Je me retrouve devant un autre problème :
Le hash que je vous ai indiqué est simplifié par rapport à celui que
j'ai réellement, en fait la forme est du style :
$h->{'a'}->{'b'}->{'c'}->{'val'} = 5;
$h->{'a'}->{'b'}->{'c'}->{'rap'} = 12;
$h->{'a'}->{'b'}->{'c'}->{'for'} = 66;
$h->{'a'}->{'b'}->{'c'}->{'rat'} = 78;
$h->{'a'}->{'b'}->{'c'}->{'mlp'} = 89;
Je voudrais effectuer un tri à partir de 'c', ce que j'ai fait avec
votre aide, le problème étant que je voudrais trier 'c' en fonction
de 'rat', or j'effectue un tri selon toutes les valeurs.
Sauriez-vous comment je peux m'y prendre pour ne prendre en compte que
'rat' dans le tri des valeurs ?
Je me retrouve devant un autre problème :
Le hash que je vous ai indiqué est simplifié par rapport à celui que
j'ai réellement, en fait la forme est du style :
$h->{'a'}->{'b'}->{'c'}->{'val'} = 5;
$h->{'a'}->{'b'}->{'c'}->{'rap'} = 12;
$h->{'a'}->{'b'}->{'c'}->{'for'} = 66;
$h->{'a'}->{'b'}->{'c'}->{'rat'} = 78;
$h->{'a'}->{'b'}->{'c'}->{'mlp'} = 89;
Je voudrais effectuer un tri à partir de 'c', ce que j'ai fait avec
votre aide, le problème étant que je voudrais trier 'c' en fonction
de 'rat', or j'effectue un tri selon toutes les valeurs.
Sauriez-vous comment je peux m'y prendre pour ne prendre en compte que
'rat' dans le tri des valeurs ?
Je me retrouve devant un autre problème :
Le hash que je vous ai indiqué est simplifié par rapport à celui que
j'ai réellement, en fait la forme est du style :
$h->{'a'}->{'b'}->{'c'}->{'val'} = 5;
$h->{'a'}->{'b'}->{'c'}->{'rap'} = 12;
$h->{'a'}->{'b'}->{'c'}->{'for'} = 66;
$h->{'a'}->{'b'}->{'c'}->{'rat'} = 78;
$h->{'a'}->{'b'}->{'c'}->{'mlp'} = 89;
Je voudrais effectuer un tri à partir de 'c', ce que j'ai fait avec
votre aide, le problème étant que je voudrais trier 'c' en fonction
de 'rat', or j'effectue un tri selon toutes les valeurs.
Sauriez-vous comment je peux m'y prendre pour ne prendre en compte que
'rat' dans le tri des valeurs ?
Effectivement, c'est un peu fouilli (désolé) vu que la boucle que je
donne en exemple est imbriquée dans une autre boucle car le tableau
asser grand, avec différents agencement de clés. Je vais essayer
d'être plus clair.
$h = {};
# mon but est de classer unit11 selon la valeur rattachée à rat
$h{val1}{unit11}{1}{rat} = 5;
$h{val1}{unit11}{1}{ooo} = 3;
$h{val1}{unit11}{1}{iii} = 6;
$h{val1}{unit11}{1}{ppp} = 4;
$h{val1}{unit11}{2}{rat} = 2;
$h{val1}{unit11}{2}{ooo} = 1;
$h{val1}{unit11}{2}{iii} = 5;
$h{val1}{unit11}{2}{ppp} = 105;
# j'ai plusieurs critères de tri, et je 'raccroche' le tri que je
voudrais effectuer à partir de $k3 car les boucles concernant $k et
$k2 servent dans une boucle principale.
foreach $k (keys %{$h}) { #ici val1
foreach $k2 (keys %{$h->{$k}}) { #ici unit11
# ici le tri que je voudrais effectuer -> unit11 classé selon 'rat'
# la méthode que vous m'avez indiquée fait effectivement le
classement que je souhaite, mais sur la totalité des valeurs suivant
les clés rattachées à unit11
foreach my $k3 ( sort
{ $h->{$k}->{$k2}->{$a->[0]}->{$a->[1]} <=>
$h->{$k}->{$k2}->{$b->[0]}->{$b->[1]} }
map { $t = $_; (map{[$t, $_]} keys
%{$h->{$k}->{$k2}->{$t}}) }
keys %{$h->{$k}->{$k2}}) {
print "$k3->[0] $k3->[1]
".$h->{$k}->{$k2}->{$k3->[0]}->{$k3->[1]}."n";
}
}
}
Ce que je voudrais, c'est en fait à partir de $k3, indiquer que c'est
'rat' qui détermine le trie, or, en passant par keys(), je ne vois pas
comment obtenir uniquement la valeur de 'rat' comme critère.
Effectivement, c'est un peu fouilli (désolé) vu que la boucle que je
donne en exemple est imbriquée dans une autre boucle car le tableau
asser grand, avec différents agencement de clés. Je vais essayer
d'être plus clair.
$h = {};
# mon but est de classer unit11 selon la valeur rattachée à rat
$h{val1}{unit11}{1}{rat} = 5;
$h{val1}{unit11}{1}{ooo} = 3;
$h{val1}{unit11}{1}{iii} = 6;
$h{val1}{unit11}{1}{ppp} = 4;
$h{val1}{unit11}{2}{rat} = 2;
$h{val1}{unit11}{2}{ooo} = 1;
$h{val1}{unit11}{2}{iii} = 5;
$h{val1}{unit11}{2}{ppp} = 105;
# j'ai plusieurs critères de tri, et je 'raccroche' le tri que je
voudrais effectuer à partir de $k3 car les boucles concernant $k et
$k2 servent dans une boucle principale.
foreach $k (keys %{$h}) { #ici val1
foreach $k2 (keys %{$h->{$k}}) { #ici unit11
# ici le tri que je voudrais effectuer -> unit11 classé selon 'rat'
# la méthode que vous m'avez indiquée fait effectivement le
classement que je souhaite, mais sur la totalité des valeurs suivant
les clés rattachées à unit11
foreach my $k3 ( sort
{ $h->{$k}->{$k2}->{$a->[0]}->{$a->[1]} <=>
$h->{$k}->{$k2}->{$b->[0]}->{$b->[1]} }
map { $t = $_; (map{[$t, $_]} keys
%{$h->{$k}->{$k2}->{$t}}) }
keys %{$h->{$k}->{$k2}}) {
print "$k3->[0] $k3->[1]
".$h->{$k}->{$k2}->{$k3->[0]}->{$k3->[1]}."n";
}
}
}
Ce que je voudrais, c'est en fait à partir de $k3, indiquer que c'est
'rat' qui détermine le trie, or, en passant par keys(), je ne vois pas
comment obtenir uniquement la valeur de 'rat' comme critère.
Effectivement, c'est un peu fouilli (désolé) vu que la boucle que je
donne en exemple est imbriquée dans une autre boucle car le tableau
asser grand, avec différents agencement de clés. Je vais essayer
d'être plus clair.
$h = {};
# mon but est de classer unit11 selon la valeur rattachée à rat
$h{val1}{unit11}{1}{rat} = 5;
$h{val1}{unit11}{1}{ooo} = 3;
$h{val1}{unit11}{1}{iii} = 6;
$h{val1}{unit11}{1}{ppp} = 4;
$h{val1}{unit11}{2}{rat} = 2;
$h{val1}{unit11}{2}{ooo} = 1;
$h{val1}{unit11}{2}{iii} = 5;
$h{val1}{unit11}{2}{ppp} = 105;
# j'ai plusieurs critères de tri, et je 'raccroche' le tri que je
voudrais effectuer à partir de $k3 car les boucles concernant $k et
$k2 servent dans une boucle principale.
foreach $k (keys %{$h}) { #ici val1
foreach $k2 (keys %{$h->{$k}}) { #ici unit11
# ici le tri que je voudrais effectuer -> unit11 classé selon 'rat'
# la méthode que vous m'avez indiquée fait effectivement le
classement que je souhaite, mais sur la totalité des valeurs suivant
les clés rattachées à unit11
foreach my $k3 ( sort
{ $h->{$k}->{$k2}->{$a->[0]}->{$a->[1]} <=>
$h->{$k}->{$k2}->{$b->[0]}->{$b->[1]} }
map { $t = $_; (map{[$t, $_]} keys
%{$h->{$k}->{$k2}->{$t}}) }
keys %{$h->{$k}->{$k2}}) {
print "$k3->[0] $k3->[1]
".$h->{$k}->{$k2}->{$k3->[0]}->{$k3->[1]}."n";
}
}
}
Ce que je voudrais, c'est en fait à partir de $k3, indiquer que c'est
'rat' qui détermine le trie, or, en passant par keys(), je ne vois pas
comment obtenir uniquement la valeur de 'rat' comme critère.
foreach my $k3 (sort {
$h->{$k}{$k2}{$a}{rat} <=> $h->{$k}{$k2}{$a}{rat}
} keys %{$h->{$k}{$k2}}) {
foreach my $k3 (sort {
$h->{$k}{$k2}{$a}{rat} <=> $h->{$k}{$k2}{$a}{rat}
} keys %{$h->{$k}{$k2}}) {
foreach my $k3 (sort {
$h->{$k}{$k2}{$a}{rat} <=> $h->{$k}{$k2}{$a}{rat}
} keys %{$h->{$k}{$k2}}) {