笛卡尔积运算组合多个集合以创建一个新集合,其中包含输入集合中所有可能的元素组合。
要对提供的类结构执行笛卡尔积运算(其中一个人有多条狗,每条狗有多只幼犬),可以有效地利用LINQ。
首先,创建一个笛卡尔积函数,该函数将多个集合作为输入:
<code>public static IEnumerable<IEnumerable<T>> CartesianProduct<T>(params IEnumerable<T>[] sets) { if (sets.Length == 0) { return new[] { Enumerable.Empty<T>() }; } return sets[0].SelectMany(x => sets.Skip(1).Aggregate( new[] { x }, (acc, set) => CartesianProduct(acc, set) // 修正此处 )); }</code>
然后,将该函数应用于每条狗的幼犬集合:
<code>var puppyCombinations = CartesianProduct( from dog in person.Dogs select dog.Puppies );</code>
这将生成一个序列的序列,其中每个内部序列表示来自每条狗的一只幼犬的组合。可以访问和处理生成的组合,具体取决于需要。 (此处对代码进行了细微调整,以提高可读性和潜在的效率,具体取决于CartesianProduct
函数的实现。)
注意: 上述CartesianProduct
函数的实现可能需要进一步改进以处理空集合或其他边缘情况,以确保其健壮性和效率。 一个更清晰、更易于理解的递归实现可能更适合。
以上是如何使用LINQ计算多个集合的笛卡尔积?的详细内容。更多信息请关注PHP中文网其他相关文章!