Yazılım.
CevapSitesi.com Beta!
Çözüm Noktası
Facebook, Twitter, Google+ veya e-posta ile paylaşın.
| Sorular | Makaleler | Üyeler | Etiketler  | İletişim
Soru sormak ya da cevap vermek için;
giriş yapın veya üye olun.

Sosyal medya hesaplarınızla da giriş yapabilirsiniz.
0

Bir IList veya diziyi nasıl rastgele karıştırabilirim?

Bir IList veya dizi var. Bunların elamanlarını rastgele nasıl karıştırabilirim?

Soran:04.06.16 18:27
misafir  

1 Cevap

0
Bunun için bir çok yöntem var. Bazıları şöyle:

1. LINQ kullanarak OrderBy ile karıştarıbilirsin.

List<int> yeniListe = liste.OrderBy(a => Guid.NewGuid()).ToList();
2. LINQ ve Random kullanarak karıştırabilirsin.
Random rnd = new Random();
List<int> yeniListe = liste.OrderBy<T, int>((item) => rnd.Next()).ToList();
3. LINQ kullanmadan klasik karıştırma yöntemini (Fisher-Yates Shuffle) kullanabilirsin. Bu yöntemde yeni bir liste oluşturman da gerekmez. Zaten Guid kullanan örneği hız yönünden kalabalık listelerde tercih etmemek lazım.

Bu örnekte bir genişletme yöntemi var. Tabi üsttekiler de birer genişletme yöntemi olarak yazılabilir. Genişletme yöntemleri hakkında şuradan bilgi alabilirsiniz.

    public static class GenisletmeYontemlerim
{
public static void ListeyiKaristir<T>(this IList<T> liste)
{
Random rnd = new Random();
int n = liste.Count;
while (n > 1)
{
n--;
int k = rnd.Next(n + 1);
T deger = liste[k];
liste[k] = liste[n];
liste[n] = deger;
}
}
}
Kullanımı:
liste.ListeyiKaristir();


Cevaplayan: 10.06.16 22:44
cevapsitesi
102,035p 16ü
Cevabı seçen: 15.06.16 00:26
canora
101,387p 4ü