私はいくつかの古いVBコードの書き換えを担当しています。私はそれがどのように機能するかを理解していますが、彼らがしたことを行うためのはるかに効率的な方法があるように感じます。それが何なのかわからない。これは、データ要件の点で私がする必要があるものと本当に似ている不自然な例です。
ユーザーは、GUIで車のメーカー、メーカー、モデル、色を選択する必要があります。次のような大きなテキストファイルがあります。
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.
したがって、最初の選択がスバルである場合、スバルはいずれもトラックではないため、2番目のボックス(メーカー)にはトラックを選択するオプションはありません。同様に、フォード、セダン、トーラスを選択した場合、最後のボックス(色)には青を選択するオプションが表示されません。または黒。または、赤、緑、白以外のもの。
私の前にコードを書いた人々はこれを思いつきました(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
アルゴリズムレベルでも構文レベルでも、それは恐ろしいだけだと思います。1つは、正しく実行された場合に数行を読み取るだけでよい場合に、ファイル全体を解析することです。これをさらに非効率的にするために、私の実際のデータには、4つではなく6つの選択肢があります。これは、データの重複の量を考えると、必要以上のデータを格納することにもなります。
ファイルにデータを保存する別の方法、またはgetValidOptions
関数をより美しく効率的にするためにデータを解析する別の方法を探しています。これを行う方法はありますか?