2016-06-10 1 views
2

Ich habe eine Schleife, die nach Werten sucht und sie zu einem Wörterbuch hinzufügt, wenn sie nicht existieren. Diese Überprüfung findet innerhalb einer Schleife statt, so dass es wiederholt auftritt. Wenn das Wörterbuch wächst, stelle ich mir vor, dass es bei jeder Prüfung eine innere Schleife gibt, die teuer wird. In dem Bemühen, meine gesamte Routine zu beschleunigen, frage ich mich, ob ich etwas optimieren sollte? Wenn das so ist, wie?Wiederholtes Überprüfen des gesamten Skriptwörterbuchs über Schleifenfehler? VB6

keycnt = 1 
    For x = 1 to 500000 
    STRVAL = returnarray(8, x) 
      If Not STRDIC.Exists(STRVAL) Then 
       STRDIC.Add STRVAL, keycnt 
       keycnt = keycnt + 1 
      End If 
    next x 
+2

Woher kommt STRVAL? Ohne zu wissen, dass es schwierig ist zu sagen, was du hier fragst? Der Vorteil der Verwendung eines Wörterbuchs besteht jedenfalls darin, dass Schlüsselsuchen sehr schnell sind - typischerweise erfolgt das Nachschlagen über Hash-Schlüssel und nicht nur über eine einfache Schleife. –

+0

Es ist nur ein Wert, den ich basierend auf einem Recordset gesetzt habe, das ich mit ADO verwende. Während ich das Recordset durchlaufe, weise ich den Wert zu. Ich habe das alles entfernt, um meine Frage zu vereinfachen, weil ich wirklich nicht möchte, dass sich jemand darauf konzentriert. –

+0

Ihre Antwort TIM hilft. Das frage ich. Ist es in Ordnung, die Wörterbuchsuche wiederholt zu starten oder gibt es eine bessere Methode? –

Antwort

4

Wenn Ihr Wörterbuch ist ein Scripting.Dictionary und nicht einig [schlecht umgesetzt] maßgeschneiderte Datenstruktur Klasse, dann eine Schlüsselsuche sein sollte O (1) Komplexität, nicht O (n) wie Sie scheinen zu implizieren; Die wachsende Anzahl von Schlüsseln hat keinen Einfluss auf die Leistung.

Schlüsselsuche in einer Hashtabelle oder einem Wörterbuch ist grundsätzlich kostenlos, die einzige Sache, die in diesem Code behoben werden muss, ist die Einrückung.

+0

Ja, es ist ein Scripting.Dictionary. Danke Mat's Tasse. Ich war mir nicht sicher, wie das Nachschlagen im Wörterbuch ablief, und ich befürchtete, dass es ein Fehler war, es in einer riesigen Schleife zu verschachteln. –

Verwandte Themen