首页 > 后端开发 > C++ > 如何在C#中随机随机洗牌?

如何在C#中随机随机洗牌?

DDD
发布: 2025-02-03 08:24:16
原创
767 人浏览过

How Can I Randomly Shuffle a List in C#?

>随机化C#列表

>

>本文探讨了在C#中调整通用列表(列表

)元素的有效方法。 重点是广泛使用的Fisher-Yates洗牌算法。

Fisher-Yates Shuffle是一种可随机列表顺序的经过验证的算法。 它在这里作为任何Ilist>的简洁扩展方法实现

在这里,代表

class的实例。
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.RandomSystem.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中文网其他相关文章!

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