列表的所有排列

我希望能够得到这样的清单

var list=new List{0, 1, 2}; 

得到这样的结果

 var result= new List<List>{ new List{0, 1, 2}, new List{0, 2, 1}, new List{1, 0, 2}, new List{1, 2, 0}, new List{2, 0, 1}, new List{2, 1, 0} }; 

我对缺少数字的集合感兴趣,只对存在的数字组合感兴趣。 有任何想法吗?


此外,我已经研究过诸如从数字列表中获取所有可能的组合之类的解决方案,但它们并不合适。

那个给了我这样的东西

 var result= new List<List> { // [[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]] // serialized the result to JSON so it would be quicker. }; 

它并没有吐出所有的组合。


尝试使用这些扩展方法的大小:

 public static IEnumerable> Permute(this IEnumerable sequence) { if (sequence == null) { yield break; } var list = sequence.ToList(); if (!list.Any()) { yield return Enumerable.Empty(); } else { var startingElementIndex = 0; foreach (var startingElement in list) { var remainingItems = list.AllExcept(startingElementIndex); foreach (var permutationOfRemainder in remainingItems.Permute()) { yield return startingElement.Concat(permutationOfRemainder); } startingElementIndex++; } } } private static IEnumerable Concat(this T firstElement, IEnumerable secondSequence) { yield return firstElement; if (secondSequence == null) { yield break; } foreach (var item in secondSequence) { yield return item; } } private static IEnumerable AllExcept(this IEnumerable sequence, int indexToSkip) { if (sequence == null) { yield break; } var index = 0; foreach (var item in sequence.Where(item => index++ != indexToSkip)) { yield return item; } }