首页 > 后端开发 > C++ > 如何使用 LINQ 高效地检索集合的随机子集?

如何使用 LINQ 高效地检索集合的随机子集?

Mary-Kate Olsen
发布: 2025-01-06 03:17:42
原创
495 人浏览过

How Can I Efficiently Retrieve a Random Subset of a Collection Using LINQ?

使用 Shuffle 高效检索随机子集合

在编程中经常会遇到检索集合的随机子集的挑战。 LINQ 提供了多种机制来操作数据集合,开发人员经常寻求优化方法来获取随机子集。

建议的解决方案:实现 Fisher-Yates-Durstenfeld Shuffle

一个最佳方案实现这一目标的方法是通过 Fisher-Yates-Durstenfeld 洗牌。该技术涉及迭代地从源集合中选择一个随机元素,并将其与最后一个未排序的元素交换,确保每个元素都有相等的被选择的机会。

通过扩展方法实现

为了增强 LINQ 的功能,开发了一种称为 Shuffle 的扩展方法,它结合了 Fisher-Yates-Durstenfeld洗牌。此方法接受 IEnumerable 输入并返回打乱的序列。此外,它还支持传递 Random 实例进行自定义。

实现涉及将源集合转换为 List,确保恒定时间随机访问。然后按顺序交换元素以创建随机排列。

用法示例

要使用 Shuffle 扩展方法:

  1. 导入命名空间定义扩展的位置。
  2. 在源上调用 Shuffle 方法集合。
  3. 可以选择指定一个 Random 实例进行自定义。
  4. 根据需要使用生成的打乱序列。

代码示例

提供的代码片段演示了如何使用Shuffle扩展来获取指定的打乱子集合尺寸:

// take n random items from yourCollection
var randomItems = yourCollection.Shuffle().Take(n);
登录后复制

以上是如何使用 LINQ 高效地检索集合的随机子集?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板