Mi occupo di riscrivere un vecchio codice VB. Capisco come funziona, ma sento che esiste un modo molto più efficiente per fare ciò che hanno fatto. Non riesco proprio a capire di cosa si tratta. Ecco un esempio inventato che in termini di requisiti dei dati è davvero simile a quello che devo fare.
L'utente deve selezionare 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 (marca) non dovrebbe avere un'opzione per selezionare Camion perché nessuno dei Subarus è camion. Allo stesso modo, se selezionano Ford, Berlina e Taurus, l'ultima casella (colore) non dovrebbe 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 escogitato questo (in python-y psuedocode):
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 solo orribile, sia a livello di algoritmo, sia a livello di sintassi. Per uno, analizza l'intero file, quando deve solo leggere un paio di righe se fatto bene. Per renderlo ancora più inefficiente, i miei dati reali hanno 6 opzioni tra cui scegliere, piuttosto che solo 4. Questo sta anche memorizzando più dati di quanti ne abbia bisogno, data la quantità di duplicazione dei dati.
Sto cercando un modo diverso di archiviare i dati nel file o un modo diverso di analizzarlo per rendere la getValidOptions
funzione sia più carina che più efficiente. Ci sono modi in cui potrei farlo?