簡體   English   中英

如何在不多次使用同一行的情況下合並矩陣的元素

[英]How to combine elements of a matrix without using the same row more than once each time

我的目標是結合這些元素(每個字母代表一個不同的字符串)

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

以任何可能的方式在文本框中輸入內容,而無需重復並且不合並同一行的元素。 點表示延續。 所以如果矩陣只是

A;B
X;C

結果應為AX AC BX BC。 如果它是

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

結果將是AXP AXO AXK ACP ACO ACK ADP ADO ADK BXP ....

我找到了一種算法

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);
    }
}

但是它創建了我不需要的ABC CBA等。

查看Eric Lippert的C#笛卡爾積遞歸

您的每個“矩陣”行都將是遞歸步驟中的一個序列。

累加器函數將是字符串連接。 即使出於性能原因,您也可以選擇StringBuilder.Append

雷斯特的例子

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM