>随机化C#列表
在这里,
public static void Shuffle<T>(this IList<T> list) { int n = list.Count; while (n > 1) { n--; int k = rng.Next(n + 1); T value = list[k]; list[k] = list[n]; list[n] = value; } }
>rng
随机数生成选项Random
标准类对于许多应用程序就足够了。 但是,对于要求更高加密安全性和提高随机性的情况
此版本使用来增强随机性。 请注意添加的检查以确保生成的随机数在所需的范围内。
System.Random
System.Security.Cryptography
>用法示例
public static void Shuffle<T>(this IList<T> list) { using (var provider = new RNGCryptoServiceProvider()) { int n = list.Count; while (n > 1) { byte[] box = new byte[1]; do provider.GetBytes(box); while (!(box[0] < (byte)((n + 1) * (double.MaxValue / 256)))); //Ensure value within range int k = box[0] % (n + 1); T value = list[k]; list[k] = list[n]; list[n] = value; } } }
两种方法均使用相同的使用:RNGCryptoServiceProvider
性能注意事项
<>>提供速度,
提供了出色的随机性,但以性能为代价。 根据应用程序的需求选择适当的方法。 对于大多数通用的改组,List<Product> products = GetProducts(); products.Shuffle();
>
以上是如何在C#中随机随机洗牌?的详细内容。更多信息请关注PHP中文网其他相关文章!