Mi occupo di riscrivere alcuni vecchi codici VB. Capisco come funziona, ma sento che c'è un modo molto più efficiente di fare ciò che hanno fatto. Non riesco a capire cosa sia. Ecco un esempio forzato che in termini di requisiti dei dati è molto simile a quello che devo fare.
L'utente deve scegliere il produttore, la marca, il modello e il colore della propria auto in una GUI. Ho un grande file di testo che assomiglia a questo:
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.
Quindi, se la prima selezione è Subaru, la seconda casella (make) dovrebbe not avere un'opzione per selezionare Truck perché nessuno dei Subarus è camion. Allo stesso modo, se selezionano Ford, Sedan e Toro, l'ultima casella (colore) dovrebbe non mostrare un'opzione per selezionare il blu. O nero. O qualsiasi cosa diversa da rosso, verde o bianco.
Le persone che hanno scritto il codice prima di me hanno trovato questo (in psuedocode python-y):
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
Penso che sia semplicemente orribile, sia a livello di algoritmo, sia a livello di sintassi. Per uno, analizza l'intero file, quando ha solo bisogno di leggere un paio di righe se fatto bene. Per rendere questo ancora più inefficiente, i miei dati reali hanno 6 opzioni da selezionare, anziché solo 4. Questo è anche l'archiviazione di più dati di cui ha bisogno, data la quantità di duplicazione dei dati.
Sto cercando un modo diverso di archiviare i dati nel file o un modo diverso di analizzarli per rendere la getValidOptions
funzionante sia più carina che più efficiente. Ci sono dei modi in cui potrei fare questo?