Estou encarregado de reescrever algum código VB antigo. Entendo como funciona, mas sinto que há uma maneira muito mais eficiente de fazer o que eles fizeram. Eu simplesmente não consigo descobrir o que é. Aqui está um exemplo artificial que, em termos de requisitos de dados, é realmente semelhante ao que eu preciso fazer.
O usuário deve escolher o fabricante, marca, modelo e cor do seu carro em uma GUI. Eu tenho um arquivo de texto grande que se parece com isso:
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.
Portanto, se a primeira seleção for Subaru, a segunda caixa (marca) não deverá ter a opção de selecionar Caminhão porque nenhum dos Subarus é caminhão. Da mesma forma, se eles selecionam Ford, Sedan e Taurus, a última caixa (cor) não deve mostrar uma opção para selecionar azul. Ou preto. Ou qualquer coisa que não seja vermelho, verde ou branco.
As pessoas que escreveram o código antes de mim vieram com isso (em 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
Eu acho isso hediondo, tanto no nível de algoritmos quanto no nível de sintaxe. Por um lado, ele analisa o arquivo inteiro, quando só precisa ler algumas linhas, se bem. Para tornar isso ainda mais ineficiente, meus dados reais têm 6 opções para selecionar, em vez de apenas 4. Isso também está armazenando mais dados do que é necessário, dada a quantidade de duplicação de dados.
Estou procurando uma maneira diferente de armazenar os dados no arquivo ou uma maneira diferente de analisá-los para tornar a getValidOptions
função mais bonita e mais eficiente. Há alguma maneira de eu fazer isso?