หากคุณใช้. NET 3.5 คุณสามารถใช้ IEnumerable coolness ต่อไปนี้ (VB.NET ไม่ใช่ C # แต่ความคิดควรชัดเจน ... ):
Random rnd=new Random();
string[] MyRandomArray = MyArray.OrderBy(x => rnd.Next()).ToArray();
แก้ไข: ตกลงและนี่คือรหัส VB.NET ที่สอดคล้องกัน:
Dim rnd As New System.Random
Dim MyRandomArray = MyArray.OrderBy(Function() rnd.Next()).ToArray()
การแก้ไขครั้งที่สองในการตอบสนองต่อข้อสังเกตว่า System.Random "ไม่ใช่ threadsafe" และ "เหมาะสำหรับแอพของเล่น" เนื่องจากการส่งคืนลำดับตามเวลา: ตามที่ใช้ในตัวอย่างของฉัน Random () นั้นปลอดภัยต่อเธรดอย่างสมบูรณ์เว้นแต่ คุณอนุญาตให้รูทีนที่คุณสุ่มอาร์เรย์ให้ป้อนซ้ำอีกครั้งซึ่งในกรณีนี้คุณจะต้องการอะไรเช่นนั้น lock (MyRandomArray)
ต่อไปเพื่อไม่ให้ข้อมูลของคุณเสียหายซึ่งจะป้องกันrnd
เช่นกัน
นอกจากนี้ควรเข้าใจว่า System.Random ในฐานะที่เป็นแหล่งของเอนโทรปีนั้นไม่ค่อยแข็งแกร่งนัก ดังที่ระบุไว้ในเอกสาร MSDNคุณควรใช้สิ่งที่ได้มาจาก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]);
}