リストのすべての事前定義された長さの順列を昇順で取得しようとしています。
For example, take the set: "ABCDE"
I'd like the returning result to be:
ABC, ABD, ABE, ACD, ACE, ADE, BCD, BCE, BDE, CDE
つまり、「B」が「A」の前に現れることはありません (昇順) が、この要件内のすべてのバリエーションが必要です。
私は LINQ を使用したくないので、これを実装する最速の方法を見つけようとしています (このアプリでは速度が重要です)。
これまでのところ、文字のリストのリストがあります:
List<List<char>> Combinations;
ここで、内側の「リスト」は「ABC」のような組み合わせ (各文字は文字) であり、外側のリストはすべての組み合わせのリストになります。
結果の各セット (上記の例では 3) の長さは動的である必要があるため、何らかの再帰が必要になると考えています...実装方法がわかりません。
どんな助けでも大歓迎です!
編集
これまでのところ、これが私が持っているものです(私は近づいているように感じます...実際に最終リストを作成することはできません(ユニオンが機能していません-間違って使用していますか?):
private List<List<char>> AscendingPermute(List<char> InMovements, int Combinations)
{
List<List<char>> Ret = new List<List<char>>();
for(int i = 0; i <= InMovements.Count - Combinations; i++)
{
if(Combinations <= 1){
Ret.Add(new List<char>() {InMovements[i] });
return Ret;
}
else
{
Ret.Union(AscendingPermute(InMovements.GetRange(1, InMovements.Count - 1), Combinations - 1));
}
}
return Ret;
}
私は正しい軌道に乗っていますか?私は何が欠けていますか?
ありがとう!