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

Überprüfen, ob Array noch ein Element enthält



<< |< 1 2 >| >> 14 Einträge, 2 Seiten
[HR]Doomrunner
 2003-10-05 12:54
#60938 #60938
User since
2003-09-04
77 Artikel
BenutzerIn
[default_avatar]
Hi,
ich durchlaufe in einer foreach Schleife Elemente eines Arrays. Wie kann ich überprüfen, ob es ein weiteres Element gibt, oder ob ich bereits am letzten angekommen bin?

Code (perl): (dl )
1
2
3
4
5
6
my $filter = "where ";
     my $names = $sth->{NAME};
     foreach $key (@$names) { 
          push(@spaltennamen,$key);
          $filter .= $key." like '%$filter%' or "; 
}
jan
 2003-10-05 13:53
#60939 #60939
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
if($key == (scalar @$names - 1))
{
# letztes
}
\n\n

<!--EDIT|jan|1065347618-->
[HR]Doomrunner
 2003-10-05 14:07
#60940 #60940
User since
2003-09-04
77 Artikel
BenutzerIn
[default_avatar]
danke jan,

stimmte allerdings nicht ganz. Denn du vergleichst die Anzahl der Elemente mit dem letzten Element. Habe das entsprechend angepasst. Hier der Code, für die Leute dies interessiert:

Code (perl): (dl )
if($key ne (@$names[scalar @$names - 1])) { $filter .= " or "; }
jan
 2003-10-05 15:06
#60941 #60941
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
oh, stimmt, sorry. wenn die elemente in deinem array größer werden, wäre es vielleicht besser, den index zu durchlaufen und dann wie oben beschrieben zu prüfen:
for my $index (0..scalar @array -1)
{
if($index == (scalar @array - 1))
{
#letztes
}
}
jan
 2003-10-05 15:07
#60942 #60942
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
achja, und statt
(@$names[scalar @$names - 1]))
kannst du auch
$$names[-1]
schreiben...
DS
 2003-10-05 15:08
#60943 #60943
User since
2003-08-04
247 Artikel
BenutzerIn
[default_avatar]
Warum so umständlich, @$names - 1 wäre einfacher $#$names, oder noch besser: einfach $$names[-1], damit greift man auf das letzte Element im Array zu...

Übrigens: Wenn die Gefahr besteht, daß ein Wert zweimal vorkommt, dann würde ich gleich mit Indizes arbeiten, das ist dann sicherer...

Edit: Hab' nicht gesehen, daß es ne Referenz ist... ändert aber vom Prinzip nix...\n\n

<!--EDIT|DS|1065352241-->
jan
 2003-10-05 15:21
#60944 #60944
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
$#$names sieht immer so unschön aus, deshalb vermeide ich es meistens. mein ästhetik-wille geht mir da über die performance, ansonsten vollkommen korrekt.
DS
 2003-10-05 15:27
#60945 #60945
User since
2003-08-04
247 Artikel
BenutzerIn
[default_avatar]
[quote=jan,05.10.2003, 13:21]$#$names sieht immer so unschön aus, deshalb vermeide ich es meistens. mein ästhetik-wille geht mir da über die performance, ansonsten vollkommen korrekt.[/quote]
Hm, da stimm' ich dir zu... aber ich muß gestehen. daß ich so einen Fall so gut wie noch nie hatte... wobei man's hier ja nur bräuchte, wann man mit Indizes arbeitet, und (0..$#$names) könnte man schon fast wieder dulden, oder? ;)
jan
 2003-10-05 15:33
#60946 #60946
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
hey, obfuscation hat ja auch was für sich ;)
naja, meist ist das wirklich nur so eine sache, wenn ich es in einem script einmal verwendet habe, nutzte ich es die ganze zeit, bis ich irgendwann wieder umsteige. oder eben dann, wenn ich mal "ganz ordentlich performant" schreiben will o_O ok, kommt so gut wie nie vor ;)
Dubu
 2003-10-06 04:04
#60947 #60947
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Code (perl): (dl )
1
2
3
my $names = $sth->{NAME};
push @spaltennamen, @$names;
my $filter = 'where ' . join (' or ', map { $dbh->quote ("%$_%") } grep $_, @$names);
\n\n

<!--EDIT|Dubu|1065398725-->
<< |< 1 2 >| >> 14 Einträge, 2 Seiten



View all threads created 2003-10-05 12:54.