Ich bin dafür verantwortlich, einen alten VB-Code neu zu schreiben. Ich verstehe, wie es funktioniert, aber ich habe das Gefühl, dass es einen weitaus effizienteren Weg gibt, das zu tun, was sie getan haben. Ich kann einfach nicht herausfinden, was es ist. Hier ist ein erfundenes Beispiel, das in Bezug auf die Datenanforderungen wirklich dem entspricht, was ich tun muss.
Der Benutzer muss den Hersteller, die Marke, das Modell und die Farbe seines Autos in einer grafischen Benutzeroberfläche auswählen. Ich habe eine große Textdatei, die ungefähr so aussieht:
Ford Truck F150 red
Ford Truck F150 blue
Ford Truck F150 black
Ford Truck F150 silver
Ford Truck F250 red
Ford Truck F250 green
Ford Sedan Taurus red
Ford Sedan Taurus green
Ford Sedan Taurus white
Ford...
...
Subaru SUV Forester blue
Subaru SUV Forester red
Subaru SUV Outback Black
Subaru SUV Outback Green
Subaru SUV Outback Blue
Subaru SUV Outback Red
Subaru...
...
etc.
Wenn die erste Auswahl Subaru ist, sollte das zweite Feld (Marke) keine Option zur Auswahl von LKW haben, da keiner der Subarus LKWs sind. Wenn sie Ford, Sedan und Taurus auswählen, sollte das letzte Feld (Farbe) keine Option zur Auswahl von Blau enthalten. Oder schwarz. Oder etwas anderes als rot, grün oder weiß.
Die Leute, die den Code vor mir geschrieben haben, haben sich das ausgedacht (im Python-y-Pseudocode):
def getValidOptions():
items = []
for i from 0 to numRows:
options = getLine().split()
if selectingManufacturer:
if options[0] not in items:
items.append(options[0])
else if selectingMake:
if selectedManufacturer == options[0] and options[1] not in items:
items.append(options[1])
else if selectingModel:
if selectedManufacturer == options[0] and selectedMake == options[1] and options[2] not in items:
items.append(options[2])
else if selectingColor:
if selectedManufacturer == options[0] and selectedMake == options[1] and selectedModel == options[2] and options[3] not in items:
items.append(options[3])
return items
Ich finde das einfach abscheulich, sowohl auf Algorithmus- als auch auf Syntaxebene. Zum einen analysiert es die gesamte Datei, wenn es nur ein paar Zeilen durchlesen muss, wenn es richtig gemacht wird. Um dies noch ineffizienter zu machen, haben meine realen Daten 6 Optionen zur Auswahl und nicht nur 4. Dies speichert auch mehr Daten als nötig, angesichts des Umfangs der Datenverdoppelung.
Ich suche entweder nach einer anderen Methode zum Speichern der Daten in der Datei oder nach einer anderen Methode zum Parsen, um die getValidOptions
Funktion sowohl hübscher als auch effizienter zu gestalten. Gibt es Möglichkeiten, wie ich das tun könnte?