使用 Shuffle 高效检索随机子集合
在编程中经常会遇到检索集合的随机子集的挑战。 LINQ 提供了多种机制来操作数据集合,开发人员经常寻求优化方法来获取随机子集。
建议的解决方案:实现 Fisher-Yates-Durstenfeld Shuffle
一个最佳方案实现这一目标的方法是通过 Fisher-Yates-Durstenfeld 洗牌。该技术涉及迭代地从源集合中选择一个随机元素,并将其与最后一个未排序的元素交换,确保每个元素都有相等的被选择的机会。
通过扩展方法实现
为了增强 LINQ 的功能,开发了一种称为 Shuffle 的扩展方法,它结合了 Fisher-Yates-Durstenfeld洗牌。此方法接受 IEnumerable 输入并返回打乱的序列。此外,它还支持传递 Random 实例进行自定义。
实现涉及将源集合转换为 List,确保恒定时间随机访问。然后按顺序交换元素以创建随机排列。
用法示例
要使用 Shuffle 扩展方法:
代码示例
提供的代码片段演示了如何使用Shuffle扩展来获取指定的打乱子集合尺寸:
// take n random items from yourCollection var randomItems = yourCollection.Shuffle().Take(n);
以上是如何使用 LINQ 高效地检索集合的随机子集?的详细内容。更多信息请关注PHP中文网其他相关文章!