LINQ实现笛卡尔积
假设您有一个类结构,其中一个人拥有多条狗,每条狗有多只幼犬,您希望找到一个LINQ解决方案来生成所有可能的幼犬组合,每个组合从每条狗中选择一只幼犬。
这里适用笛卡尔积的概念,它涉及将集合相乘以生成元素的唯一组合。虽然SQL表为此提供了一个简单的解决方案,但LINQ提供了一种优雅的方法。
首先,考虑在编译时知道集合(狗)数量的情况。您可以使用一个简单的LINQ查询:
<code>var combinations = from p1 in dog1.Puppies from p2 in dog2.Puppies from p3 in dog3.Puppies select new {p1, p2, p3};</code>
此查询将生成一系列匿名类型,每个类型代表每个狗中一只幼犬的组合。
但是,在编译时不知道集合数量的情况下,需要更动态的方法。您可以参考Eric Lippert的文章,了解使用LINQ计算笛卡尔积的方法:
https://www.php.cn/link/f28c49d8be62973ac7716e0b87dae2f9
获得CartesianProduct方法后:
<code>var combinations = CartesianProduct(from dog in person.Dogs select dog.Puppies);</code>
这将返回一系列序列,其中每个内部序列包含每个狗中一只幼犬的组合。
总而言之,无论狗的数量是静态的还是动态的,您都可以使用LINQ来生成所需的幼犬组合。
以上是LINQ 如何有效地从多只狗生成所有可能的小狗组合?的详细内容。更多信息请关注PHP中文网其他相关文章!