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<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.
Uygulamanın kaynak kodlarını buradan indirebilirsiniz.
İlgili diğer başlıklar:
- C# ile Dizi Bölümleme
- Kelimenin son harfi ile başlayan kelime oyunu
- Generic Dictionary sınıfına karıştırıcı (shuffle) Extension Method yazalım
- Belirlediğiniz şablonda rastgele string üretmek
- Listede Filtreleme Yapmanın İyi – Kötü – Çirkin Yolu
- Dizide bir elemandan kaç adet olduğunu bulalım
- C# String’i Title Case’e (Kelimelerin Baş Harfleri Büyük Gerisi Küçük) Çevirme
- For – ForEach – List
.ForEach performans karşılaştırması - C# String Dizisini String Uzunluğuna Göre Sıralamak
- Dizi oluşturma ve sıralama


Merhaba Hocam
Konuyu çok güzel bir örnek ile açıklamışsınız. Ancak benim yapmak istediğim bir makaledeki cümleleri karıştırmak. Bunu nasıl yapabileceğim hakkında biraz bilgi verebilir misiniz?
Teşekkürler.