Code Optimierung eines Fünfzeilers
am 24.01.2007 19:05:15 von stroncococcus
Hallo!
Habe hier einen kurzen Fünfzeiler, bei dem ich mir recht sicher bin,
daß man daraus einen Einzeiler machen kann. Kann mir jemand auf die
Sprünge helfen?
if (exists($target_go_hash{$target_enst})) {
push(@{$target_go_hash{$target_enst}}, $go_id);
}
else {
my @temp_array =3D ($go_id);
$target_go_hash{$target_enst} =3D \@temp_array;
}
Hauptproblem ist, und der Grund warum ich eine if Abfrage machen muss,
daß push(@{$target_go_hash{$target_enst}}, $go_id); nicht automatisch
den Key für das Array anlegt, falls dieser nicht vorhanden ist.
Gruss,
Kai
Re: Code Optimierung eines Fünfzeilers
am 24.01.2007 19:15:35 von Frank Seitz
stroncococcus wrote:
>
> Habe hier einen kurzen Fünfzeiler, bei dem ich mir recht sicher bin,
> daß man daraus einen Einzeiler machen kann. Kann mir jemand auf die
> Sprünge helfen?
>
> if (exists($target_go_hash{$target_enst})) {
> push(@{$target_go_hash{$target_enst}}, $go_id);
> }
> else {
> my @temp_array = ($go_id);
> $target_go_hash{$target_enst} = \@temp_array;
> }
>
> Hauptproblem ist, und der Grund warum ich eine if Abfrage machen muss,
> daß push(@{$target_go_hash{$target_enst}}, $go_id); nicht automatisch
> den Key für das Array anlegt, falls dieser nicht vorhanden ist.
Die Zeile reicht:
push @{$target_go_hash{$target_enst}}, $go_id;
Stichwort: Autovivfication.
http://en.wikipedia.org/wiki/Autovivification
Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel
Re: Code Optimierung eines Fünfzeilers
am 24.01.2007 19:21:28 von Dominik Seelow
stroncococcus wrote:
> Hallo!
>
> Habe hier einen kurzen Fünfzeiler, bei dem ich mir recht sicher bin,
> daß man daraus einen Einzeiler machen kann. Kann mir jemand auf die
> Sprünge helfen?
>
> if (exists($target_go_hash{$target_enst})) {
> push(@{$target_go_hash{$target_enst}}, $go_id);
> }
> else {
> my @temp_array = ($go_id);
> $target_go_hash{$target_enst} = \@temp_array;
> }
>
> Hauptproblem ist, und der Grund warum ich eine if Abfrage machen muss,
> daß push(@{$target_go_hash{$target_enst}}, $go_id); nicht automatisch
> den Key für das Array anlegt, falls dieser nicht vorhanden ist.
Hallo Kai,
wieso nicht?
use strict;
my %target_go_hash;
for my $i (0..5){
my $target_enst=sprintf ("ENST%011d",rand(2000000));
foreach my $go_id ("GO:0008289", "GO:0005088", "GO:0005509"){
push @{$target_go_hash{$target_enst}}, $go_id;
}
}
foreach my $enst (keys %target_go_hash){
print join ("\t",$enst,@{$target_go_hash{$enst}}),"\n";
}
funktioniert wunderbar bei mir!
HTH,
Dominik