C# ile Dizi Karıştırma
C# ile Dizi Karıştırma
Bu yazımda, bir dizi’nin C# ile nasıl karıştırılacağı (shuffle edileceği) ile ilgili bir örnek yapacağım.
Aşağıdaki formu oluşturarak, hemen programlamaya başlayalım.
İlk ihtiyacımız olan şey, tabiiki bir Liste. Rastgele kelimelerden oluşan karışık bir liste oluşturmak için, aşağıdaki RastgeleKelimeUret fonksiyonunu yazalım.
const string Harfler = “1234567890abcdefghijklmnopqrstuvwxyz”;
Random r = new Random();
public string RastgeleKelimeUret()
{
char[] arrReturn = new char[15];
Parallel.For(0, 15, iLoop => {
arrReturn[iLoop] = Harfler[r.Next(0, Harfler.Length – 1)];
});
return new string(arrReturn);
}
Form’umuzun Load olayında, Parallel For yeteneklerinden faydalanarak, 15 harften oluşan 100 adet rastgele kelime üretiyoruz ve OrjinalListe isimli Generic Collection’a dolduruyoruz.
private void MainForm_Load(object sender, EventArgs e)
{
Parallel.For(0, 100, iLoop => {
OrjinalListe.Add(RastgeleKelimeUret());
});
lbOrjinalListe.BeginUpdate();
for (int iLoop = 0; iLoop < OrjinalListe.Count; iLoop++)
lbOrjinalListe.Items.Add(OrjinalListe[iLoop]);
lbOrjinalListe.EndUpdate();
}
Karıştır butonunun Click olayında ise; OrjinalListe collection’ının ListeKaristir() fonksiyonunu kullanıyoruz.
private void btnKaristir_Click(object sender, EventArgs e)
{
lbKaristirilmisListe.BeginUpdate();
lbKaristirilmisListe.Items.Clear();
List KaristirilmisListe = OrjinalListe.ListeKaristir();
for (int iLoop = 0; iLoop < KaristirilmisListe.Count; iLoop++)
lbKaristirilmisListe.Items.Add(KaristirilmisListe[iLoop]);
lbKaristirilmisListe.EndUpdate();
}
Generic dizilerde ListeKaristir() isminde bir fonksiyon bulunmaz. Nereden geliyor bu fonksiyon?
public static class ExtensionManager
{
private static Random r = new Random();
public static List ListeKaristir(this List Liste)
{
List tmpList = Liste.GetRange(0, Liste.Count);
List arrReturn = new List();
while (tmpList.Count > 0)
{
int rastgele = r.Next(0, tmpList.Count);
arrReturn.Add(tmpList[rastgele]);
tmpList.RemoveAt(rastgele);
}
return arrReturn;
}
}
ExtensionManager isimli static class’ın içerisine yazdığım ListeKaristir fonksiyonundan geliyor. İlk parametreye eklediğim this anahtar kelimesine dikkat edelim. Bu sayede, List yapısında olan tüm nesnelerde ListeKaristir() fonksiyonunun çalışmasını sağlamış olduk.
Uygulamanın kaynak kodlarınıburadan indirebilirsiniz.