随机子集合的最佳 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中文网其他相关文章!