Я відповідаю за перезапис старого коду VB. Я розумію, як це працює, але я відчуваю, що існує набагато ефективніший спосіб зробити те, що вони зробили. Я просто не можу зрозуміти, що це таке. Ось надуманий приклад, що з точки зору вимог до даних насправді схожий на те, що мені потрібно зробити.
Користувач повинен вибрати виробника, марку, модель та колір свого автомобіля в графічному інтерфейсі. У мене великий текстовий файл, який виглядає приблизно так:
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.
Отже, якщо перший вибір - Subaru, у другому ящику (марці) не повинно бути можливості вибору Вантажівки, оскільки жоден із Subarus не є вантажівками. Аналогічно, якщо вони вибирають Ford, Sedan і Taurus, то в останньому полі (кольорі) не повинно бути опції вибору синього. Або чорний. Або що-небудь, крім червоного, зеленого чи білого.
Люди, які писали код до мене, придумали це (у 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
Я думаю, що це просто огидно, як на рівні алгоритму, так і на рівні синтаксису. Для одного він аналізує весь файл, коли йому потрібно лише прочитати пару рядків, якщо зроблено правильно. Щоб зробити це ще неефективнішим, у моїх реальних даних є 6 варіантів вибору, а не просто 4. Це також зберігає більше даних, ніж потрібно, з огляду на кількість дублювання даних.
Я шукаю або інший спосіб зберігання даних у файлі, або інший спосіб їх аналізу, щоб зробити getValidOptions
функцію більш красивою та ефективнішою. Чи є якісь способи я це зробити?