将字符串数组随机化的最佳方法是什么.网我的数组包含大约500个字符串,我想用相同的字符串创建一个新的Array个,但顺序是随机的.

请在回答中加入一个C#示例.

推荐答案

如果您使用的是.NET3.5,则可以使用以下IEnumerable Coolness:

Random rnd=new Random();
string[] MyRandomArray = MyArray.OrderBy(x => rnd.Next()).ToArray();    

编辑:下面是相应的VB.网络代码:

Dim rnd As New System.Random
Dim MyRandomArray = MyArray.OrderBy(Function() rnd.Next()).ToArray()

第二次编辑,回应该系统的 comments .由于返回基于时间的序列,Random"不是线程安全的"和"仅适用于玩具应用程序":在我的示例中,Random()是完全线程安全的,除非您允许重新输入随机数组的 routine ,在这种情况下,您无论如何都需要大约lock (MyRandomArray)个,以避免损坏数据,这也将保护rnd.

此外,应该充分理解该系统.随机性作为熵的来源不是很强.正如MSDN documentation中所指出的,如果你在做任何与安全相关的事情,你应该使用从System.Security.Cryptography.RandomNumberGenerator中派生出来的东西.例如:

using System.Security.Cryptography;

...

RNGCryptoServiceProvider rnd = new RNGCryptoServiceProvider();
string[] MyRandomArray = MyArray.OrderBy(x => GetNextInt32(rnd)).ToArray();

...

static int GetNextInt32(RNGCryptoServiceProvider rnd)
    {
        byte[] randomInt = new byte[4];
        rnd.GetBytes(randomInt);
        return Convert.ToInt32(randomInt[0]);
    }

.net相关问答推荐

.NET发布的应用程序运行与开发不同的端口

Azure Function应用程序-如何升级.NET运行时

如何在 .net MAUI 中删除不需要编译的平台?

无法使用 int.Parse 从字符串转换值

将 Span 传递到函数时出现 F# 错误

如何在 C# 中自动删除临时文件?

判断内部异常的最佳方法?

HttpClient 请求抛出 IOException

如何在 C# 中直接执行 SQL 查询?

将跟踪输出重定向到控制台

什么是 SUT,它来自哪里?

我应该在 LINQ 查询中使用两个where子句还是&&?

没有 @Html.Button !

为什么 C# 不推断我的泛型类型?

如何仅在需要时提升权限?

Environment.GetFolderPath(...CommonApplicationData) 在 Vista 上仍然返回C:\Documents and Settings\

在 WPF DataGrid 中绑定 ComboBoxColumn 的 ItemsSource

如何获取命名空间中的所有类?

为什么 .NET 中没有 Tree 类?

如何判断枚举是否包含数字?