Array of Hash
Martin M.
- perl
Hi zusammen,
ich hab jetzt meine Datenstruktur zusammmen, aber komme nicht weiter bei meinem Problem.
my @AoH = (
{
server => "fred",
type => "slow",
size => "10",
},
{
server => "fred",
type => "middle",
size => "50",
},
{
server => "fred",
type => "middle",
size => "50",
},
{
server => "hans",
type => "fast",
size => "80",
}
);
Nun will ich alle sizes vom selben server mit derselbem typ zusammenzählen und in ein neues AoH überführen und weiss nicht, wie ich das am geschicktesten machen soll.
Ergebnis sollte sein:
my @AoH_neu = (
{
server => "fred",
type => "slow",
size => "10",
},
{
server => "fred",
type => "middle",
size => "100",
},
{
server => "hans",
type => "fast",
size => "80",
}
);
Ich hab schonmal ein bisschen rumprobiert.
for my $i ( 0 .. $#AoH ) {
unless ($seen{$AoH[$i]{server}}) {
$seen{$AoH[$i]{server}} = 1;
push(@uniq, $AoH[$i]{server});
}
}
So hab ich zwar alle server von dem hash "unique" in einem array, aber kein plan, wie ich dann weitermachen sollte.
Danke für nen Tipp.
ciao,
Martin M.
my @AoH = (
{
server => "fred",
type => "slow",
size => "10",
},
{
server => "fred",
type => "middle",
size => "50",
},
{
server => "fred",
type => "middle",
size => "50",
},
{
server => "hans",
type => "fast",
size => "80",
}
);
>
> Nun will ich alle sizes vom selben server mit derselbem typ zusammenzählen und in ein neues AoH überführen und weiss nicht, wie ich das am geschicktesten machen soll.
Ich kenne keinen Einwegschritt von einem AoH zu einem AoH
Ich kenne einen Einwegschritt von einem AoH zu einem HoH
Aus dem HoH lässt sich dann der neue AoH ableiten.
#mit HoH
my %HoH;
foreach( @AoH ){
$HoH{ ${$\_}{server} }{ ${$\_}{type} } += ${$\_}{size} ;
}
#Ausgabe:
foreach(keys %HoH){
foreach my $i( keys %{ $HoH{$\_} } ){
print "server:", $\_, ", type:", $i, ", size:", $HoH{$\_}{$i}, "\n";
}
}
mfg Beat
--
Woran ich arbeite:
[X-Torah](http://www.elcappuccino.ch/cgi/tok.pl?extern=1-pub-com3306-1)
><o(((°> ><o(((°>
<°)))o>< ><o(((°>o
Ich kenne keinen Einwegschritt von einem AoH zu einem AoH
Ich kenne einen Einwegschritt von einem AoH zu einem HoH
Aus dem HoH lässt sich dann der neue AoH ableiten.#mit HoH
my %HoH;
foreach( @AoH ){
$HoH{ ${$_}{server} }{ ${$_}{type} } += ${$_}{size} ;
}
#Ausgabe:
foreach(keys %HoH){
foreach my $i( keys %{ $HoH{$_} } ){
print "server:", $_, ", type:", $i, ", size:", $HoH{$_}{$i}, "\n";
}
}mfg Beat
Hi,
das ist schlicht grossartig! Danke.
Ich bin seit Tagen dran und komme auf so eine Lösung nicht. Aber immerhin verstehe ich sie.
Es funktioniert ja so ähnlich wie der "seen"-hash in dem unique-beispiel, aber eben mit einem HoH und dem Wert von size, anstatt mit einer 1.
Da fehlt mir glaub wirklich das Programmierhirn um auf solche Lösungen zu kommmen :(
ciao,
Martin