Jika Anda menggunakan .NET 3.5, Anda dapat menggunakan kesejukan IEnumerable berikut (VB.NET, bukan C #, tetapi idenya harus jelas ...):
Random rnd=new Random();
string[] MyRandomArray = MyArray.OrderBy(x => rnd.Next()).ToArray();
Edit: OK dan ini kode VB.NET yang sesuai:
Dim rnd As New System.Random
Dim MyRandomArray = MyArray.OrderBy(Function() rnd.Next()).ToArray()
Suntingan kedua, sebagai tanggapan terhadap komentar bahwa System.Random "tidak threadsafe" dan "hanya cocok untuk aplikasi mainan" karena mengembalikan urutan berbasis waktu: seperti yang digunakan dalam contoh saya, Random () sangat aman untuk thread, kecuali Anda mengizinkan rutin di mana Anda mengacak array untuk dimasukkan kembali, dalam hal ini Anda akan memerlukan sesuatu seperti lock (MyRandomArray)
itu agar tidak merusak data Anda, yang akan melindungi rnd
juga.
Juga, harus dipahami bahwa System.Random sebagai sumber entropi tidak terlalu kuat. Seperti dicatat dalam dokumentasi MSDN , Anda harus menggunakan sesuatu yang berasal dari System.Security.Cryptography.RandomNumberGenerator
jika Anda melakukan sesuatu yang berhubungan dengan keamanan. Sebagai contoh:
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]);
}