Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]11532[/thread]

hash sortieren



<< >> 6 Einträge, 1 Seite
Froschpopo
 2008-03-27 22:59
#107569 #107569
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Ich nutze popup_menu() von CGI zum erzeugen eines <select>-Tags.

Folgendes Problem:
Ich möchte ein Popup-Menü erzeugen, welches Altergruppen anzeigt.

Also sowas wie:
Code: (dl )
1
2
3
4
5
6
7
<select name="alter">
<option value="16">16 Jahre</option>
<option value="17">17 Jahre</option>
<option value="18">18 Jahre</option>
<option value="19">19 Jahre</option>
... usw
</select>

Das mache ich dann so:
Code: (dl )
1
2
3
4
5
my $cgi = new CGI;
my %fields = ();
$fields{$_} = $_ . ' Jahre' for 14..60;

print $cgi->popup_menu('alter', \%fields);

Das doofe ist, dass der Hash total unsortiert herauskommt (was ja normal bei Perl ist).
Wie könnte man das nun aufsteigend sortieren?

Bei der sort()-FUnktion bekomme ich ja leider nur ein Array und müsste dann auf "Jahre" verzichten da ich dies nicht im value-Attribut haben will!
Die einzige Möglichkeit sehe ich momentan nur noch darin, das popup_menu() später durch einen regex zu jagen der dann immer "</o" durch " Jahre</o" ersetzt.
renee
 2008-03-27 23:34
#107572 #107572
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Zur Not könntest Du mit CPAN:Tie::IxHash arbeiten...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Froschpopo
 2008-03-27 23:34
#107573 #107573
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
hat sich erledigt!
machs jetzt so:
Code: (dl )
$cgi->popup_menu(-name => 'alter', -values => [sort keys(%fields)], -labels => \%fields);
GwenDragon
 2008-03-28 19:23
#107610 #107610
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
Wie wäre es mit:
Code (perl): (dl )
popup_menu(-name=>'alter', -values => [16..60], -labels=> { map { $_=>"$_ Jahre"} 16..60 } )
Froschpopo
 2008-03-29 15:42
#107622 #107622
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
noch besser! Danke!
KurtZ
 2008-03-29 19:31
#107625 #107625
User since
2007-12-13
411 Artikel
BenutzerIn
[default_avatar]
Froschpopo+2008-03-27 21:59:40--
Das doofe ist, dass der Hash total unsortiert herauskommt (was ja normal bei Perl ist).
Wie könnte man das nun aufsteigend sortieren?


um mal die Frage grundsätzlich zu beantworten möchte ich auf hashslices verweisen.

@hash{@sorted} liefert dir ein Array der Values passend zu den Einträgen in @sorted.

@sorted wiederum kannst aus keys %hash in einer dir beliebigen Sortierung und Teilung erzeugen.
TMTOWTDYOG (there's more than one way to dig your own grave)
<< >> 6 Einträge, 1 Seite



View all threads created 2008-03-27 22:59.