Hi,
ich bin auf der Suche nach einer cleveren Lösung, wie auch auf die in einem Array abgelegten Daten quasi invers zugreifen kann.
Normalerweise macht man's ja so:
$wert = $array[$schluessel];
Ich habe jetzt aber das Problem, das ich den Wert kenne, aber den Schluessel dazu suche. Bislang ist mir nur eingefallen mir ein Hash zu erstellen, bei dem ich Schluessen und Wert sozusagen vertausche. Das jetzt $wert eindeutig sein muss ist mir bewust. Gibt es da nicht vielleicht noch eine andere Lösung?
Hein
User since
2003-08-04
14371
Artikel
ModeratorIn
Du willst also den Index eines Elements aus einem Array haben?
my @array = qw(dies ist ein Test);
my $check = 'ein';
my ($index) = grep{ $array[$_] eq $check } 0..$#array;
print "$check ist im Element $index des Arrays\n";
Man kann aber auch ein Modul wie
List::Util verwenden...
Danke, genau das habe ich gesucht.
Hein
User since
2004-03-22
5697
Artikel
ModeratorIn + EditorIn
auf dauer kann das aber sehr rechenaufwendig werden. wenn die viele solcher zugriffe brauchst würd ich mir eine andere Datenstruktur als einen array nehmen.
Hallo,
das von renee duerfte wohl gleichwertig zu meiner Loesung sein:
my @array = ("dies", "ist", "ein", "Test");
my $index = 'ein';
for my $i ( 0 .. $#array ) {
if($index eq $array[$i]) {
print "'$index' ist in \@array an pos. $i\n";
}
}
Fragt sich was sinnvoller ist.
gruß,
rperl
User since
2003-08-04
14371
Artikel
ModeratorIn
Es ist nicht generell zu sagen. Meins findet immer nur das erste Auftreten (wäre aber auch leicht zu ändern). Es ist halt kompakt...
Wenn immer nur das erste Auftreten gefunden werden soll, sollte man bei Dir noch ein "last" in dem if-Block einbauen und dann ist Deins auf jeden Fall performanter...
So wie es jetzt ist, gibt es bei jedem Auftreten von "ein" etwas aus.
Es kommt also auch etwas auf die Aufgabenstellung an...
User since
2007-06-09
575
Artikel
HausmeisterIn
ich würde grep nehmen, wozu gibt's sonst die ganzen grep- und map funktionen?
Gerade weil wir alle in einem Boot sitzen, sollten wir froh sein, dass nicht alle auf unserer Seite sind
Hi,
renee+2007-11-20 14:32:33--Meins findet immer nur das erste Auftreten (wäre aber auch leicht zu ändern). Es ist halt kompakt...
was müßte denn geändert werden um das zweite, dritte, ... letzte Vorkommen zu finden (wenn es die in den Daten denn gibt).
MfG
Hein
User since
2003-08-04
14371
Artikel
ModeratorIn
Man muss immer beachten wofür man was verwendet. Ein grep auf eine große Liste (z.B. nach dem Einlesen von sehr großen Dateien) kann große Performancenachteile haben, weil es die Schleife nicht abbricht wenn der erste Treffer auftaucht (vorausgesetzt oben angenommenes Szenario liegt vor)...
map und grep sind nicht immer die beste Wahl...