Schrift
[thread]6982[/thread]

Prüfen ob bestimmter Wert in einer Liste ist

Leser: 1


<< >> 5 Einträge, 1 Seite
Faldaar
 2005-05-11 12:03
#54764 #54764
User since
2003-11-05
14 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich habe ein Array mit Zahlen und möchte gerne überprüfen ob ein bestimmter Wert darin vorhanden ist. Gibt es da eine elegantere Lösung als das Array bis zu einem Treffer oder Ende des Arrays mit for/foreach durchzugehen?
Sichergestellt ist dass die Liste nur Zahlen enthällt und der Wert ebenfalls eine Zahl ist.

Bisher sieht das in etwa so aus
Code: (dl )
1
2
3
4
5
6
7
8
9
10
@liste = (1, 5, 8, 15, 67); #Mal nen Auszug, kann durchaus VIEL länger sein
$Wert = 23;
foreach (@liste) {
if ($_==$Wert) {
# irgendwas tun
}
else {
#was andres tun
}
}


Funktioniert, finde ich nur etwas mühsam, vor allem wenn die Liste Lang ist und eventuell mehrfach im Script so eine Prüfung statt findet, kostet das Zeit.

Gruß
Martin
Es ist schwieriger eine vorgefasste Meinung zu zertrümmern als ein Atom. (Albert Einstein)
renee
 2005-05-11 12:11
#54765 #54765
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
my @array = qw(1 2 3 23 7 26);
my $wert = 23;

if(grep{$_ == $wert}@array){
print "yes\n";
}
else{
print "no\n";
}
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/
Ronnie
 2005-05-11 12:14
#54766 #54766
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Du könntest grep verwenden, oder Perl6::Junctions oder Quantum::Superpositions (overkill! ). Am einfachsten wird wohl grep sein.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/perl

use strict;
use warnings;

use Perl6::Junction qw/any/;

my @array = qw(1 2 3 23 7 26);
my $value = 23;

(any(@array) == $value) ? print "yes\n" : print "no\n";


EDIT: Beispiel nachgeschoben.\n\n

<!--EDIT|Ronnie|1115799950-->
Faldaar
 2005-05-11 12:20
#54767 #54767
User since
2003-11-05
14 Artikel
BenutzerIn
[default_avatar]
Super, sieht doch besser aus. Schaun wir mal obs auch schneller ist.

Danke Euch

Martin
Es ist schwieriger eine vorgefasste Meinung zu zertrümmern als ein Atom. (Albert Einstein)
Strat
 2005-05-11 16:24
#54768 #54768
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
schneller als grep, was immer die komplette liste durchlaeuft, muesste haeufig (bei groesseren datenmengen) eine for-schleife mit abbruch sein (d.h. wenn dich nur interessiert, ob so ein element vorkommt), z.B.
Code: (dl )
1
2
3
4
5
6
foreach (@liste)  {
if ($_==$Wert) {
  # irgendwas tun, z.B. $gefunden = 1;
  last; #abbruch
}
}

sonst: warum die liste nicht in einen hash convertieren und dann einfach nachschauen, ob zu dem schluessel ein wert existiert? ein hashlookup ist fast immer schneller als eine liste zu durchlaufen\n\n

<!--EDIT|Strat|1115814313-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< >> 5 Einträge, 1 Seite



View all threads created 2005-05-11 12:03.