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); }</pre>

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<string> 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<T> ListeKaristir<T>(this List<T> Liste)
    {
        List<T> tmpList = Liste.GetRange(0, Liste.Count);
        List<T> arrReturn = new List<T>();

        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<T>* fonksiyonundan geliyor. İlk parametreye eklediğim *this* anahtar kelimesine dikkat edelim. Bu sayede, *List<T>* yapısında olan tüm nesnelerde *ListeKaristir()* fonksiyonunun çalışmasını sağlamış olduk.

![](/assets/uploads/2009/12/ShuffleList_2.png "ShuffleList_2")

Uygulamanın kaynak kodlarını buradan indirebilirsiniz.

İlgili diğer makaleler

blog comments powered by Disqus

Engin Polat hakkında

Chief Architect, Microsoft RD, Microsoft MVP

Ada ve Ege'nin babası ;)

Kategoriler

İstatistik

Makale Adedi: 459

Creative Commons Lisansı