C# ile Dizi Bölümleme
Bilgeadam’da öğrencilerimden birinin sorduğu soru üzerine, bir dizinin, belli sayıda elemanlardan oluşan alt dizilere bölünmesi ile ilgili aşağıdaki uygulamayı yazdım.
Uygulama şöyle çalışıyor; rastgele kelimelerden oluşan bir dizimiz var, bu diziyi, n elemanlı alt dizilere bölmek istiyoruz.
Hemen kolları sıvayalım ve kod yazmaya başlayalım.
Öncelikle rastgele kelime oluşturma fonksiyonunu yazalım;
const string Harfler = "abcdefghijklmnopqrstuvwxyz";
Random r = new Random();
public string RastgeleKelimeUret(int HarfAdet)
{
char[] arrReturn = new char[HarfAdet];
Parallel.For(0, HarfAdet, iLoop => {
arrReturn[iLoop] = Harfler[r.Next(0, Harfler.Length - 1)];
});
return new string(arrReturn);
}
Bu fonksiyonu C# ile Dizi Karıştırma yazımdan hatırlayacaksınız. Şimdi bu fonksiyonu kullanarak List<string> tipinde bir diziye 25 eleman dolduran kodumuzu yazalım;
List<string> BolunecekDizi = new List<string>();
Parallel.For(5, 25, iLoop => {
BolunecekDizi.Add(RastgeleKelimeUret(iLoop));
});
Parallel For kullanarak Multi-Core ve Multi-Thread destekli kod yazdığımıza dikkat edelim. Bölümleme fonksiyonunu ExtensionMethod olarak yazacağız.
public static class ExtensionManager
{
public static List<T>[] Bolumle<T>(this List<T> Dizi, int ParcaAdet)
{
if (Dizi == null)
throw new Exception("Dizi boş olamaz..");
if (ParcaAdet < 1)
throw new Exception("Parça Adet 1'den küçük olamaz..");
int DiziBoyu = (int)Math.Floor(Dizi.Count / (double)ParcaAdet) + 1;
List<T>[] arrReturn = new List<T>[DiziBoyu];
int Adim = 0;
Parallel.For(0, Dizi.Count, iLoop => {
if (iLoop % ParcaAdet == 0 && iLoop > 0)
Adim += 1;
if (arrReturn[Adim] == null)
arrReturn[Adim] = new List<T>();
arrReturn[Adim].Add(Dizi[iLoop]);
});
return arrReturn;
}
}
Artık tek yapmamız gereken List<T> generic tipinde nesnelerde Bolumle() fonksiyonunu kullanmak olacak.
List<string>[] Bolumler = BolunecekDizi.Bolumle(3);
Uygulamanın kaynak kodlarını buradan indirebilirsiniz.
İlgili diğer başlıklar:
- C# ile Dizi Karıştırma
- Kısa Sınav – 4
- Normal For ve Paralel For Döngülerinin Karşılaştırması
- Dizi oluşturma ve sıralama
- Kelimenin son harfi ile başlayan kelime oyunu
- Generic Dictionary sınıfına karıştırıcı (shuffle) Extension Method yazalım
- C# String’i Title Case’e (Kelimelerin Baş Harfleri Büyük Gerisi Küçük) Çevirme
- C# ile Image Crawler Uygulaması
- C# ile isNumeric() fonksiyonu yazalım
- Code Challenge #1