Leser: 24
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
#!/usr/bin/perl -w use strict; use warnings; my %hash = ( 100 => 'foo', 200 => 'bar', 300 => 'foobar', 400 => 'foofoo', 500 => 'barbar', ); my $test = '300'; my $nr = grep {$_ eq $test} keys %hash; print "Laufende Nr. $nr\n";
2011-03-01T12:06:23 biancaWie bekomme ich es hin, dass hier das Ergebnis 2 geliefert wird, weil der Key 300 als Array betrachtet der Eintrag [2] ist?
grep allein geht nicht, das liefert 1, verstehe ich auch, weil es in diesem Kontext die Anzahl liefert. Wie bekomme ich das andere hin?
my @sortedkeys = sort keys %hash;
2011-03-01T12:38:53 biancaDanke für die Antwort. Ich bin überrascht, dass man tatsächlich eine Schleife ansetzen muss. Das wollte ich mir eigentlich sparen, weil ich die Aufgabe an sich für viel zu profan halte :)
Gibt es da garnichts mit List::Util oder map() oder soetwas "perliges"? Ich würde auch immer gern an soetwas dazulernen.
1 2 3 4 5
use List::Util qw(first); my $i = 0; my @sortedarray = map {[$_,$i++]} sort keys(%hash); my $nr = (first {$_->[0] >= $test} @sortedarray)->[1];
2011-03-01T12:38:53 bianca[...]
Gibt es da garnichts mit List::Util oder map() oder soetwas "perliges"?
[...]
1 2
use List::MoreUtils qw/firstidx/; my $idx = firstidx { $_ eq $test } sort keys %hash;
2011-03-01T14:10:24 murphyList::MoreUtils qw/firstidx/;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
#!/usr/bin/perl -w use strict; use warnings; my %hash = ( 100 => 'foo', 200 => 'bar', 300 => 'foobar', 400 => 'foofoo', 500 => 'barbar', ); my $test = '300'; my @keys = sort { $a <=> $b } keys %hash ; my %keys_nummeriert ; @keys_nummeriert{@keys} = ( 0 .. $#keys ) ; printf "Index von value '%s' ist '%d'\n" , $test , $keys_nummeriert{$test} ;