有没有办法将以下代码段转换为循环而不是使用大量LINQ?
public static IEnumerable<IEnumerable<T>> Combinations<T>(this IEnumerable<T> elements, int k)
{
return k == 0
? new[] {new T[0]}
: elements.SelectMany((e, i) =>
elements.Skip(i + 1).Combinations(k - 1).Select(c => (new[] {e}).Concat(c)));
}
目标是提出给定元素列表的大小k的所有可能组合。
答案 0 :(得分:0)
这是我对此的第一次看法
public static IEnumerable<IEnumerable<int>> Combs(List<int> e, int size)
{
for (int i=0; i< e.Count; i ++)
{
if (size == 1)
yield return new[] {e[i]};
foreach ( var next in Combs(e.GetRange(i + 1, e.Count - (i + 1)), size - 1) )
yield return new[] { e[i] }.Concat(next);
}
}
但是,如果可能的话,我想简化foreach语句,可能还有concat参数......