यदि आप .NET 3.5 पर हैं, तो आप निम्न IEnumerable शीतलता का उपयोग कर सकते हैं (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 "थ्रेडसेफ़ नहीं है" और "केवल खिलौना-ऐप के लिए उपयुक्त" एक समय-आधारित अनुक्रम वापस करने के कारण: जैसा कि मेरे उदाहरण में उपयोग किया गया है, रैंडम () पूरी तरह से थ्रेड-सुरक्षित है, जब तक कि आप उस रूटीन की अनुमति दे रहे हैं जिसमें आप सरणी को फिर से दर्ज करने के लिए यादृच्छिक करते हैं, जिस स्थिति में आपको lock (MyRandomArray)
अपने डेटा को दूषित न करने के लिए किसी भी तरह से कुछ की आवश्यकता होगी, जो रक्षा करेगाrnd
।
इसके अलावा, यह अच्छी तरह से समझा जाना चाहिए कि Entropy के स्रोत के रूप में 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]);
}