Primitive type'lar için sıralama işlemini bir şekilde list.Sort() vs gibi metotlar kullanarak yapabiliyoruz. Peki kendi yazdığımız objeler için bunu nasıl yaparız ? .Net tarafında iki objeyi belli field&property'lere göre sıralamamızı veya compare etmemizi sağlayan IComparable<T> interface'i bulunmakta. Bu interface ile List<T> tipidne tanımladığımız değişkenimize bizim belirttiğimiz kritere göre sıralama özelliği kazandırmış oluyoruz. Örnek bir case üzerinden gidelim; Rectangle adında bir objemiz olsun içerisinde Rectangle objeleri bulunan bir array'imiz olsun bu arrayde bulunan objeleri alanı en küçük olandan büyük olana doğru sıralayalım. İlk olarak Rectangle objemizi aşağıdaki gibi tanımlayalım.
public class Rectangle
{
public double Length { get; set; }
public double Breadth { get; set; }
public double Area
{
get
{
return Length * Breadth;
}
}
}
Şimdi ise üsttede belirtiğimiz gibi dikdörtgen objelerini küçük olandan büyük olana doğru array'de sıralayalım. Bu işlem yapabilmenin bir yolu IComparable interface'ini kullanmak. Rectangle objemizi bu interface'den implement etmek. Implementasyon sonucunda Rectangle class'ı CompareTo adında bir metota sahip olur. Bu metot aracılığıyla compare işlemi yaparak array'imizi sıralayabiliriz. Rectangle class'ımızın implementasyon sonrasındaki görünümü aşağıdaki gibi olacaktır.
public class Rectangle : IComparable<Rectangle>
{
public double Length { get; set; }
public double Breadth { get; set; }
public double Area
{
get
{
return Length * Breadth;
}
}
public int CompareTo(Rectangle other)
{
if (this.Area == other.Area)
{
return this.Area.CompareTo(other.Area);
}
return other.Area.CompareTo(this.Area);
}
public override string ToString()
{
return this.Area.ToString();
}
}
Şimdi ise sırada yazdığımız bu kodu test etme işlemi var.
public static void Main()
{
var list = new List<Rectangle>
{
new Rectangle() {Length = 7, Breadth = 3},
new Rectangle() {Length = 5, Breadth = 1},
new Rectangle() {Length = 9, Breadth = 4},
new Rectangle() {Length = 2, Breadth = 7},
new Rectangle() {Length = 3, Breadth = 5}
};
list.Sort();//Sort metodu ile array'i belirtmiş olduğumuz kritere göre sıralıyoruz
foreach (var element in list)
{
Console.WriteLine(element);
}
}
Projeyi çalıştırdığımızda aşağıdaki gibi bir ekran elde etmiş olacağız.
36
21
15
14
5