Я отвечаю за переписывание старого кода 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, во втором поле (make) не должно быть возможности выбрать Truck, поскольку ни один из 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
функцию более привлекательной и эффективной. Есть ли способы, которыми я мог бы сделать это?