Geliştirdiğimiz projelerde ekrana listeleyeceğimiz dizileri harf uzunluklarına göre sıralamak isteyebiliriz.
Bu makale ile, IEnumerable<string> tipinden değişkenlere bu özelliği nasıl ekleyeceğimizi göreceğiz.
Öncelikle Extension Method‘umuzu static bir sınıf içerisine (ExtensionManager) yazmamız lazım;
public static class ExtensionManager
{
public static IEnumerable<string> Sirala(this IEnumerable<string> Liste)
{
string[] strArray = Liste.ToArray<string>();
Array.Sort(strArray, new Comparison<string>(delegate(string Kelime1, string Kelime2)
{
if (Kelime1 == null && Kelime2 == null)
{
return 0;
}
else if (Kelime1 == null)
{
return -1;
}
else if (Kelime2 == null)
{
return 1;
}
else
{
if (Kelime1.Length < Kelime2.Length)
return -1;
else if (Kelime1.Length > Kelime2.Length)
return 1;
else
return Kelime1.CompareTo(Kelime2);
}
}));
return strArray;
}
}
Yukarıdaki kod’da Array sınıfının static Sort method’unu çağırıyoruz. Karşılaştırma koşulunu, ikinci parametre’de delegate method olarak yazıyoruz.
Kullanımı;
var Rakamlar = new List { "12", "1", null, "2314", "55555", "123", "222" };
foreach (var Rakam in Rakamlar.Sirala())
{
Console.WriteLine(Rakam);
}
Sonuç;
[null]
1
12
123
222
2314
55555
C#, Programlama
array, collections, comparison, delegate, delegate method, extension method, extensionmethod, foreach, IEnumerable, public, sort, static, string, this, toarray
C# ile en basit dizi tanımlama yöntemi, değişken tipinin sonuna [] karakterlerini eklemektir.
Örnek :
int[] TekSayilar = { 3, 1, 9, 5, 7 };
string[] Ogrenciler = { "Engin", "Ahmet", "Mehmet", "Ali", "Veli" };
Dizileri sıralamak için, Array sınıfının static Sort() methodunu kullanabiliriz;
Array.Sort(TekSayilar);
Array.Sort(Ogrenciler);
Şimdi TekSayilar ve Ogrenciler dizilerindeki elemanları ekrana yazdırırsak;
foreach (int Sayi in TekSayilar)
Console.WriteLine(Sayi);
foreach (string Ogrenci in Ogrenciler)
Console.WriteLine(Ogrenci);
Dizilerdeki elemanların sıralanmış olduklarını görürüz.
C# ile string dizisini elemanların uzunluğuna göre sıralama için aşağıdaki kod kullanılabilir;
private IList<string> SortStringLength(IList<string> arrString)
{
string[] tmpString = arrString.ToArray<string>();
Array.Sort(tmpString, new Comparison<string>(delegate(string str1, string str2)
{
if (str1 == null && str2 == null)
return 0; ///iki değişkende null
else if (str1 == null)
return -1; ///birinci değişken null
else if (str2 == null)
return 1; ///ikinci değişken null
else
{
if (str1.Length < str2.Length)
return -1; ///birinci değişken daha kısa
else if (str1.Length > str2.Length)
return 1; ///ikinci değişken daha kısa
else
return str1.CompareTo(str2); ///iki değişken aynı uzunlukta, alfabetik sıralama yapılıyor
}
}));
return tmpString;
}
string[] OrnekDizi = { "333", null, "1", "22", "12", "4444" };
OrnekDizi = (string[])SortStringLength(OrnekDizi);
foreach (string s in OrnekDizi)
Console.WriteLine(s);
// Console Çıktısı:
// [null]
// 1
// 12
// 22
// 333
// 4444
Bu kodu kullanarak sıraladığınız string dizisinde, elemanlar önce uzunluklarına göre sıralanacaktır. Aynı uzunlukta olan elemanlar ise alfabetik dizilime göre sıralanacaktır.