Feststellen ob Array in Array?

23/10/2008 - 12:17 von Manuel Reimer | Report spam
Hallo,

gegeben ist ein Array nach diesem Schema:

my @test=([0,1,2,3], [0,2,3,4], [0,3,4,5]);

Ich möchte nun möglichst effizient (es geht um ein paar 100.000
Elemente) und schnell ermitteln ob z.B. ein Element "(0,2,3,4)" in dem
Array vorhanden ist. Wie stelle ich das an?

Mein erster Ansatz:
print "ja" if (grep {@$_ == (0,2,3,4)} @test);

tut auf jedem Fall schonmal nicht.

CU

Manuel

www.jetzt-abwaehlen.de Wàhlen gehen 2009! Ein Aufruf etwas zu àndern.
Die letzte Stimme, die man hört, bevor die Welt untergeht, wird die
eines Experten sein, der versichert, das sei gar nicht möglich.
Beitràge mit *X-No-Html Header* kann ich weder lesen noch beantworten!
 

Lesen sie die antworten

#1 Wolf Behrenhoff
23/10/2008 - 14:50 | Warnen spam
Manuel Reimer wrote:
Hallo,

gegeben ist ein Array nach diesem Schema:

my @test=([0,1,2,3], [0,2,3,4], [0,3,4,5]);

Ich möchte nun möglichst effizient (es geht um ein paar 100.000
Elemente) und schnell ermitteln ob z.B. ein Element "(0,2,3,4)" in dem
Array vorhanden ist. Wie stelle ich das an?

Mein erster Ansatz:
print "ja" if (grep {@$_ == (0,2,3,4)} @test);

tut auf jedem Fall schonmal nicht.



Aus 2 Gründen ungeeignet:
1. Geht nicht :-) - du verwendest rechts den Komma-Operator, du
vergleichst also effektiv immer mit 0 (dem ersten Element).
2. Grep ist ungeeignet, weil es eine Liste aller gefundenen Elemente
ausgibt. Du willst aber eingentlich nur wissen, ob ein Element vorhanden
ist, kannst also nach dem ersten Fund aufhören.

Es geht auf jeden Fall mit der Kombination aus folgenden perldocs:
perldoc -q 'How do I test whether two arrays or hashes are equal'
perldoc -q 'How do I find the first array element'

Andererseits: Wie oft machst du diese Abfrage? 1x? 10x? 100x? Wenn oft,
wàre es ggf. günstiger, einen Hash zu benutzen. Müsstest dir dann einen
geeigneten Key ausdenken (also nicht die Array-Referenz)...

- Wolf

Ähnliche fragen