Odpowiadam za przepisywanie starego kodu VB. Rozumiem, jak to działa, ale wydaje mi się, że istnieje o wiele bardziej skuteczny sposób na robienie tego, co zrobili. Po prostu nie mogę zrozumieć, co to jest. Oto wymyślony przykład, że pod względem wymagań dotyczących danych jest naprawdę podobny do tego, co muszę zrobić.
Użytkownik musi wybrać producenta, markę, model i kolor swojego samochodu w GUI. Mam duży plik tekstowy, który wygląda mniej więcej tak:
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.
Więc jeśli pierwszym wyborem jest Subaru, drugie pole (marka) nie powinno mieć opcji wyboru Ciężarówka, ponieważ żadne z Subarus nie jest ciężarówkami. Podobnie, jeśli wybiorą Ford, Sedan i Byk, to ostatnie pole (kolor) nie powinno pokazywać opcji wyboru niebieskiego. Lub czarny. Lub cokolwiek innego niż czerwony, zielony lub biały.
Ludzie, którzy napisali kod przede mną, wymyślili to (w 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
Myślę, że jest to po prostu ohydne, zarówno na poziomie algorytmu, jak i na poziomie składni. Po pierwsze, parsuje cały plik, kiedy musi tylko przeczytać kilka wierszy, jeśli zostanie to zrobione poprawnie. Aby uczynić to jeszcze bardziej nieefektywnym, moje rzeczywiste dane mają 6 opcji do wyboru, a nie tylko 4. To także przechowuje więcej danych, niż trzeba, biorąc pod uwagę ilość duplikacji danych.
Szukam innego sposobu przechowywania danych w pliku lub innego sposobu ich analizy, aby getValidOptions
funkcja była ładniejsza i bardziej wydajna. Czy są na to sposoby?