Code Optimierung eines Fünfzeilers

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( [at] {$target_go_hash{$target_enst}}, $go_id);
}
else {
my [at] temp_array =3D ($go_id);
$target_go_hash{$target_enst} =3D \ [at] temp_array;
}

Hauptproblem ist, und der Grund warum ich eine if Abfrage machen muss,
daß push( [at] {$target_go_hash{$target_enst}}, $go_id); nicht automatisch
den Key für das Array anlegt, falls dieser nicht vorhanden ist.

Gruss,
Kai
stroncococcus [ Mi, 24 Januar 2007 19:05 ] [ ID #1606962 ]

Re: Code Optimierung eines Fünfzeilers

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( [at] {$target_go_hash{$target_enst}}, $go_id);
> }
> else {
> my [at] temp_array = ($go_id);
> $target_go_hash{$target_enst} = \ [at] temp_array;
> }
>
> Hauptproblem ist, und der Grund warum ich eine if Abfrage machen muss,
> daß push( [at] {$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 [at] {$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
Frank Seitz [ Mi, 24 Januar 2007 19:15 ] [ ID #1606963 ]

Re: Code Optimierung eines Fünfzeilers

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( [at] {$target_go_hash{$target_enst}}, $go_id);
> }
> else {
> my [at] temp_array = ($go_id);
> $target_go_hash{$target_enst} = \ [at] temp_array;
> }
>
> Hauptproblem ist, und der Grund warum ich eine if Abfrage machen muss,
> daß push( [at] {$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 [at] {$target_go_hash{$target_enst}}, $go_id;
}
}
foreach my $enst (keys %target_go_hash){
print join ("\t",$enst, [at] {$target_go_hash{$enst}}),"\n";
}

funktioniert wunderbar bei mir!

HTH,
Dominik
Dominik Seelow [ Mi, 24 Januar 2007 19:21 ] [ ID #1606964 ]
Perl » de.comp.lang.perl.misc » Code Optimierung eines Fünfzeilers

Vorheriges Thema: Probleme mit glob und copy
Nächstes Thema: Mein Fehler bei HTML::Parser Beispiel von Renee Baecker