Estoy a cargo de reescribir algunos viejos códigos VB. Entiendo cómo funciona, pero siento que hay una manera mucho más eficiente de hacer lo que hicieron. Simplemente no puedo entender qué es. Aquí hay un ejemplo artificial que, en términos de requisitos de datos, es realmente similar a lo que necesito hacer.
El usuario debe elegir el fabricante, la marca, el modelo y el color de su automóvil en una GUI. Tengo un archivo de texto grande que se parece a esto:
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.
Entonces, si la primera selección es Subaru, la segunda casilla (marca) no debería tener una opción para seleccionar Camión porque ninguno de los Subarus son camiones. Del mismo modo, si seleccionan Ford, Sedan y Taurus, entonces el último cuadro (color) no debería mostrar una opción para seleccionar azul. O negro. O cualquier otra cosa que no sea rojo, verde o blanco.
A las personas que escribieron el código antes que a mí se les ocurrió esto (en 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
Creo que eso es simplemente horrible, tanto a nivel de algoritmo como a nivel de sintaxis. Por un lado, analiza todo el archivo, cuando solo necesita leer un par de líneas si se hace correctamente. Para hacer esto aún más ineficiente, mis datos reales tienen 6 opciones para seleccionar, en lugar de solo 4. Esto también almacena más datos de los que necesita, dada la cantidad de duplicación de datos.
Estoy buscando una forma diferente de almacenar los datos en el archivo, o una forma diferente de analizarlos para que la getValidOptions
función sea más bonita y más eficiente. ¿Hay alguna forma de que pueda hacer esto?