Code Optimierung eines Fünfzeilers

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