2016-06-11 3 views
0

Mein Ziel dieser Elemente (Jeder Buchstabe steht für einen anderen String) zu kombinieren, istWie Elemente einer Matrix zu kombinieren, ohne die gleiche Zeile mehr als einmal jedes Mal mit

A;B;F;... 
X;C;D;... 
P;O;K;... 
... 

in einem Textfeld auf jede erdenkliche Art und Weise ohne Wiederholung und ohne Elemente der gleichen Reihe zu kombinieren. Punkte stellen eine Fortsetzung dar. Also, wenn die Matrix nur

war
A;B 
X;C 

Das Ergebnis sollte AX AC BX BC sein. Wenn es

war
A;B;F 
X;C;D 
P;O;K 

Das Ergebnis wäre AXP AXO AXK ACP ACO ACK ADP ADO ADK BXP sein ....

fand ich einen Algorithmus

private void buildAllCombinationsRecursive<TSource>(IList<TSource> i_targetList, IList<TSource> i_sourceList, int i_currentPos) 
{ 
    if (i_currentPos == i_targetList.Count) 
    { 
     string combination = ""; 
     for (int i = 0; i < i_targetList.Count; i++) 
     { 
      combination += i_targetList[i] + " "; 
     } 

     Console.WriteLine(combination); 
     return; 
    } 
    for (int i = 0; i < i_sourceList.Count; i++) 
    { 
     i_targetList[i_currentPos] = i_sourceList[i]; 
     this.buildAllCombinationsRecursive(i_targetList, i_sourceList, i_currentPos + 1); 
    } 
} 

Aber es ein ABC CBA erzeugt usw. , die ich nicht brauche.

+0

die algorithem arbeiten können, zu tun, was Sie aufgefordert, Ihre Quellenliste senden, die auf der ersten Iteration auf die Zielliste genereted nach der Zeile gelöscht verwendet werden müssen, so dass es den gleichen Prozess tun wird nur mit die 2. Reihe diesmal. –

+0

@DanielNetzer Kann das als Code darsellen? –

Antwort

0

Schauen Sie sich Eric Lippert C# Cartesian product Recursion.

Jede Ihrer 'Matrix'-Zeilen wird eine Sequenz in einem Rekursionsschritt sein.

Die Akkumulatorfunktion ist eine Stringverkettung. Obwohl, um der Leistung willen könnten Sie für StringBuilder.Append gehen.

Example on rextester

+0

Bitte teilen Sie ein Beispiel zur Verwendung von IEnumerable > CartesianProduct (diese IEnumerable > Sequenzen) 'mit meinem Problem. –

+0

Ich denke nicht, dass der Zweck dieser Website ist, vollständige Lösungen, sondern Ideen zu bieten. Ich habe die Antwort bearbeitet. –

+0

Ich denke, der Zweck dieser Website ist es, komplette Lösungen sowie Ideen zu bieten. Danke für die Bearbeitung der Antwort. –

Verwandte Themen