Das ist der beste Weg, um die Frage zu stellen, das Detail ist unten. Es hat mich eine Stunde gedauert, nur um herauszufinden, wie man die Frage stellt!
Nehmen wir an, ich habe 5 (oder mehr) Arten von Textdateien - sie werden von einem wissenschaftlichen Instrument erzeugt und haben jeweils bestimmte Ergebnisse. Lassen Sie uns diese "Typen" A, B, C, D, E nennen. Die tatsächlichen Namen der Textdateien geben das nicht weg, so dass der Benutzer nicht leicht sehen kann, was sie gerade mit dem Namen sind. Wenn es einfacher wird, könnten wir einfach eine Liste von "Strings" in Betracht ziehen. {Ich habe keine Ahnung, was ich mit Replikatarten machen soll, aber darüber mache ich mir später Sorgen)
Ich möchte dem Benutzer die Möglichkeit geben, die Textdateien zu einer Konglomeratdatei zusammenzufassen, aber die Herausforderung besteht darin, dass es nicht sinnvoll ist, bestimmte Typen zu kombinieren (aus Gründen, die ich nicht für sinnvoll halte) .
Ich habe eine Beispielmatrix der Kompatibilität erstellt
%Vor%Das heißt also, ich könnte A mit B, C, D kombinieren, aber nicht E (und so weiter).
Wenn nun ein Benutzer aus einer Liste von Dateien (die nicht offensichtlich getippt sind) Dateien mit den Typen "A, B und C" auswählt, möchte ich die Auswahl überprüfen und sagen "Ja, ABC ist eine legale Zusammenführung" und führen Sie die Zusammenführung durch.
Wenn der Benutzer A, B, C, D auswählt, würde ich gerne NEIN sagen, das ist nicht möglich, da D nicht mit B kompatibel ist - man könnte aber auch A, B, C oder A machen, C, D (wie D sollte nicht sein, wo B wäre).
Immer noch mit mir?
Ich habe die obige Matrix im Code erstellt und bin zu einer Looping-Struktur gekommen, bei der ich anfing, etwas durcheinander zu kommen und dachte, ich könnte um Hilfe bitten, bevor ich mein Haus und meine Familie verliere. Ich habe einen ziemlich großen Kommentar dazu, wie ich versuche Entscheidungen zu treffen. Denken Sie daran, dass "A" "Hund" sein könnte und "B" könnte "Katze" usw. sein.
%Vor%Ich hoffe, das ist klar. Was ist der beste Weg, um eine solche Aufgabe zu erreichen? Rekursion, LINQ "Magic", Matrix Mathe?
[EDIT:] Eine Idee, die ich gerade hatte, könnte vielleicht einfacher sein, eine Liste von Dateien anzuzeigen, und wenn ein Benutzer sie auswählt, könnte ich die anderen Optionen, die nicht kompatibel sind, "deaktivieren". Stellen Sie sich ein listBox oder ähnliches vor, wo Sie einen "A" -Typ auswählen und wenn die obige Matrix im Spiel ist, würden "E" -Dateien ausgegraut sein. Ich frage mich, ob das mich weniger stresst ...?
Ich habe nicht viel Zeit gehabt, dies zu betrachten oder meinen Code zu überarbeiten, also ist das eher ein Hirngespinst, aber es könnte ein guter Ort sein, um etwas zu beginnen und zu etwas Neuem zu werden!
%Vor%Dies sollte zur Folge haben, dass die erste die Liste VALID von ABC anzeigt und die Liste INVALID leer ist. Zweitens sollte ABC und ACD als VALID und BD und DB als INVALID angezeigt werden.
Tut mir leid, ich hatte nicht mehr Zeit, es aufzuräumen!
Sie sehen sich ein Cliquenproblem an - insbesondere das maximale Cliquenproblem.
Es gibt Algorithmen , die Sie verwenden können, um dies zu lösen, aber noch keine, die besser sind als Exponentialzeit.
Ihre Bearbeitung klingt nach einer viel besseren Idee - es sollte einfacher sein, die Auswahlmöglichkeiten einzuschränken, während Sie weitermachen.