首页 >后端开发 >C++ >如何使用 LINQ 高效生成随机子集合?

如何使用 LINQ 高效生成随机子集合?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-01 03:54:09984浏览

How to Efficiently Generate Random Subcollections Using LINQ?

随机子集合的最佳 LINQ 查询:随机播放

可以通过多种方式实现从较大集合中生成特定计数的随机打乱集合使用 LINQ。

一种有效的方法是利用Fisher-Yates-Durstenfeld 洗牌算法,可以作为 LINQ 中的扩展方法实现:

public static class EnumerableExtensions
{
    public static IEnumerable<T> Shuffle<T>(this IEnumerable<T> source, Random rng)
    {
        if (source == null) throw new ArgumentNullException(nameof(source));
        if (rng == null) throw new ArgumentNullException(nameof(rng));

        return source.ShuffleIterator(rng);
    }

    private static IEnumerable<T> ShuffleIterator<T>(
        this IEnumerable<T> source, Random rng)
    {
        var buffer = source.ToList();
        for (int i = 0; i < buffer.Count; i++)
        {
            int j = rng.Next(i, buffer.Count);
            yield return buffer[j];

            buffer[j] = buffer[i];
        }
    }
}

从“N”个项目的集合中检索计数“n”的随机子集合,其中 n

var randomItems = yourCollection.Shuffle().Take(n);

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn