如果您可以找到更好的標題,請修改。重複排列
,我會說我已經看了幾個q &一個關於這個話題,主要是this one和this article沒有開始已經找到了一種方法來做到這一點:
鑑於單詞「鬼節」我想找到所有長度的所有排列和組合。我嘗試的第一件事是迭代下面的代碼,給它的長度爲1,開始並繼續,直到達到單詞長度(9)。
public static IEnumerable<IEnumerable<T>>
GetPermutations<T>(IEnumerable<T> list, int length)
{
if (length == 1) return list.Select(t => new T[] {t});
return GetPermutations(list, length - 1)
.SelectMany(t => list.Where(e => !t.Contains(e)),
(t1, t2) => t1.Concat(new T[] {t2}));
}
這給了我意想不到的結果爲雙「E」和「L的省略,剩下最後一組短。
一個更簡單的例子可以是 'MOM'{M,O,M},其中最後一組結果將是:
-
中號
-
ö
-
MO
-
OM
-
MM
-
MOM
-
MMO
-
OMM
請注意,我想看看這兩個「M的爲可用,但我不希望看到的 「MMM」 作爲結果。由於保留原始順序(1,2,3),交換位置1和3(3,2,1)會導致'M','O','M',但是「MOM」會在結果中出現兩次此字符序列中只出現一次的結果列表(可以通過字符串比較來完成)
再次,集{1,1,2,3}我希望看到:
{1, 1}
但不是{2,2}或{3,3}
你將不得不改變where子句。 '.contains()'檢查不考慮未使用的重複項。 – ryanyuyu
你想堅持使用Linq來完成這個嗎? –
在你的「MOM」例子中,我們沒有看到「MM」,要麼 – Joe