Antwort an „Milch“ verfassen

Ich brauche quasi so etwas wie eine Datenbankabfrage für eine Array.

Was Dir als "Datenbankabfrage" vorschwebt, ist eigentlich die Nutzung eines Index', den eine Datenbank auf Anforderung anlegt (verwandt, aber nicht zu verwechseln mit dem Index eines Feldes). Ohne so einen Index, einer Art Stichwortverzeichnis, macht auch eine Datenbank lediglich das, was Dir in Form einer for-Schleife momentan Bauchschmerzen bereitet: Sie durchläuft sämtliche Datensätze.

Sprachen (Du hast Deine nicht angegeben) bieten üblicherweise keinen Index über die Daten eines Feldes (array). Unterstützt Deine Sprache assoziative Felder, könntest Du einen Index händisch anlegen:

for i in test:
  index[test[i][0] + "\t" + test[i][1]] = i

Das Ergebnis für Dein Beispiel wäre:

$index["1" + "\t" + "abc"] = 0;
$index["3" + "\t" + "abcd"] = 1;

Der Schlüssel besteht in diesem Beispiel aus den Werten 0 und 1 jedes Datensatzes, getrennt durch einen Tabulator (können Deine Werte auch Tabulatoren enthalten, musst Du einen anderen Trenner oder gleich eine Prüfsumme à la md5 oder sha benutzen).

Der dazugehörige Wert ist der Index des Datensatzes in Deinem Feld $test.

Du musst bei jeder Änderung eines Datensatzes auch den Index auf den neuesten Stand bringen (das würde eine Datenbank dir abnehmen). Womit wir dann beim Problem wären:

Du solltest Dir im Klaren sein, dass Du Dir auf diese Weise Fehlerquellen einbaust, die ein vermeintlicher Geschwindigkeitsgewinn nicht wettmachen können wird. Falls Deine bestehende Schleife ohne nennenswerte Verzögerung läuft und Du lediglich um der Bauchschmerzen wegen optimieren möchtest, bist Du wahrscheinlich auf dem falschen Weg.

Finde erst einmal heraus, wie sehr Deine for-Schleife Dein Programm verzögert. Dann überlege Dir, ob Du den Zugriff optimieren müsstest.

Merke: Premature optimization is the root of all evil.

freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar

Ihre Identität in einem Cookie zu speichern erlaubt es Ihnen, Ihre Beiträge zu editieren. Außerdem müssen Sie dann bei neuen Beiträgen nicht mehr die Felder Name, E-Mail und Homepage ausfüllen.

abbrechen