Geçtiğimiz günlerde üzerinde çalıştığım bir projede elimdeki generic bir listenin
içerisindeki elemanları rassal olarak sıralamam gerekti. Biraz uğraş ve
denemeden sonra gayet güzel ve hızlı çalışan bir kod ortaya çıktı
sizlerle de paylaşmak istedim.
Bu işi yaparken asıl sorun rassal ama
tutarlı olmak, daha doğrusu benim kaygım bu idi ama karşılaştırılan iki
elemanın eşit olduğunu söylemediğimiz sürece burada sorun çıkmıyor.
Çünkü 1 2'den, 2 de 3'ten büyük dediğimizde 1'in 3'ten de büyük olduğu
sonucuna ulaşılabiliyor. Neyse fazla uzatmadan kodu vereyim :
Random _Randomizer = new Random();
private int listRandomizerComparison(object x, object y)
{
if ((x == null && y == null) || x == y)
{
return 0;
}
if (x == null || y == null)
{
return (x == null) ? -1 : 1;
}
return (_Randomizer.Next(10) > 5) ? 1 : -1;
}
Bu sıralamayı yapan methodumuz, şimdi de gelelim nasıl kullanacağımıza :
System.Collections.Generic.List<string> listToRandomize =
new System.Collections.Generic.List<string>();
for (int i = 0; i < 1000; i++)
{
listToRandomize.Add(i.ToString());
}
listToRandomize.Sort(listRandomizerComparison);
Burada 1000
elemanlı bir string listesi yapıyorum ve rassal olarak sıralıyorum,
listeniz çok büyükse bile endişeniz olmasın zira benim bilgisayarımda
1.000.000 (bir milyon) elemanlı bir string listesi için yaklaşık 3,5
saniyede işlem tamamlanıyor.
etiketler :
.net