[Munich-pm] sort mit curried function
Robert C. Helling
helling at lmu.de
Mo Nov 19 02:06:01 PST 2012
Hallo,
ich stehe grade mal wieder auf dem Schlauch. Ich habe eine Liste mit
Hashreferenzen, wobei die Hashes mehrere Felder vom gleichen Typ haben.
Nun moechte ich gerne die Liste sortieren anhand jeweils eines Feldes des
Hashes. Die Vergleichsfunktion ist etwas kompliziert. Daher will ich sie
nicht fuer jedes Hashfeld neu schreiben, sondern mach lieber eine
gemeinsame Vergleichsfunktion, die den Namen des Feldes bekommt und dann
entsprechend gecurried wird. Schematisch wie in diesem Beispiel:
#!/usr/bin/perl -w
use strict;
my @liste = ({ x => 1, y => 4}, {x => 3, y => 2});
my $byx = &bykey('x');
foreach my $h (sort $byx @liste){
print $h->{x}, $h->{y}, "\n";
}
sub bykey {
my $key = shift;
return(sub {$a->{$key} <=> $b->{$key}});
}
Das funktioniert so. Meine Frage ist nun: Wie komme ich ohne die
Dummyvariable $byx aus? Ich habe zB schon probiert
foreach my $h (sort &&bykey('x') @liste){
aber das gibt einen Syntaxerror. Auch aehnliche Versionen mit weniger &'s
und mehr oder wenigen Klammern verschiedenen Typs habe ich probiert, aber
nichts davon funktionierte.
Wer erleuchtet mich?
Viele Gruesse
Robert
--
.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oO
Robert C. Helling Elite Master Course Theoretical and Mathematical Physics
Scientific Coordinator
Ludwig Maximilians Universitaet Muenchen, Dept. Physik
print "Just another Phone: +49 89 2180-4523 Theresienstr. 39, rm. B339
stupid .sig\n"; http://www.atdotde.de
Mehr Informationen über die Mailingliste Munich-pm