Etiketler

Meta

  • Valid XHTML 1.0 Transitional
  • Valid CSS!
  •  
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