如何根据项目总和找到数组中N个项目的所有组合?

时间:2014-12-10 22:54:21

标签: .net

以下是针对类似问题的一个解决方案的链接。我想要添加到这个解决方案中的是组合应该仅限于那些满足总和条件的项目。

https://stackoverflow.com/a/10629938/4347577

提前致谢

1 个答案:

答案 0 :(得分:0)

最简单的解决方案是添加一个where子句,用于过滤所需的结果。例如:

public static IEnumerable<IEnumerable<int>> GetPermutationsWithSum(
    IEnumerable<int> list, int length, int sum)
{
    return GetPermutationsWithRept(list, length).Where(lst => lst.Sum() == sum);
}

以下是GetPermutationsWithRept的定义(来自您在问题中链接的答案)

public static IEnumerable<IEnumerable<T>> GetPermutationsWithRept<T>(
    IEnumerable<T> list, int length)
{
    if (length == 1) return list.Select(t => new T[] { t });
    return GetPermutationsWithRept(list, length - 1)
        .SelectMany(t => list, (t1, t2) => t1.Concat(new T[] { t2 }));
}