SORU
20 EYLÜL 2008, CUMARTESİ


En iyi şekilde dize bir dizi rastgele .NET

Ne ile dizeleri bir dizi rastgele için en iyi yoldur .NET? Benim dizi hakkında 500 dizeleri içerir ve aynı dizeleri ama rasgele sırada Array Yeni oluşturmak istiyorum.

Lütfen bir C vardır# cevap örneği.

CEVAP
20 EYLÜL 2008, CUMARTESİ


Eğer .3.5, aşağıdaki IEnumerable kullanabilirsiniz serinlik NET (VB.NET, C#, ama fikir açık olmalıdır...):

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

Edit: TAMAM ve burada ilgili VB.NET kod:

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

İkincisi, sözlerine yanıt olarak düzenleme Sistemi.Rastgele "değil, iş parçacığı için güvenli" ve "uygun oyuncak uygulamaları" nedeniyle geri dönen bir zaman tabanlı sırası: olarak kullanılan örnek, Rasgele() mükemmel bir iş parçacığı için güvenli, tabii sen izin rutin hangi rastgele dizi re-girdi, bu durumda ihtiyacınız olacak bir şey gibi lock (MyRandomArray) neyse amacıyla değil, bozuk veri, koruyacak rnd de.

Ayrıca, iyi anlaşılan bir Sistem olmalı.Entropi kaynağı çok güçlü değil gibi rasgele. Sanki bir şey güvenlikle ilgili yaptığın bir şey System.Security.Cryptography.RandomNumberGenerator türetilen kullanmalısınız MSDN documentation kaydetti. Örneğin:

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]);
    }

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • L- Crysis

    L- Crysis

    30 Aralık 2011
  • macpulenta

    macpulenta

    9 EYLÜL 2006
  • wwjoshdu

    wwjoshdu

    18 ŞUBAT 2011