Tor*_*mod 1 c# linq algorithm c#-4.0
鉴于清单{1,2,3,4,5}
我想在C#中生成这些数字的所有可能序列.
1,2,3,4,5 1,2,3,5,4等
如果它是懒惰评估会很好,但它不是必需的.
应该回来
IEnumerable<IEnumerable<int>>
Run Code Online (Sandbox Code Playgroud)
我的目的是将它包装成一个自定义LINQ运算符("permutate"或其他东西).但任何好的算法都将是一个良好的开端.
谢谢.
尝试这样的事情:
public static IEnumerable<List<T>> GetPermutations<T>(IEnumerable<T> items)
{
if (!items.Any())
yield return new List<T>();
foreach (var i in items)
{
var copy = new List<T>(items);
copy.Remove(i);
foreach(var rest in GetPermutations(copy))
{
rest.Insert(0, i);
yield return rest;
}
}
}
public static IEnumerable<IEnumerable<T>> GetEnumPermutations<T>(IEnumerable<T> items )
{
return GetPermutations(items);
}
Run Code Online (Sandbox Code Playgroud)
当然你可以在那里更改List-implementation但是internaly我会坚持一些集合,因为remove更容易处理(.有可能但不具有可读性或高性能)