Nesnelerin listelerini belirli bir özelliğe göre verimli bir şekilde sıralamak, her C# geliştiricisi için çok önemli bir beceridir. Bu makale, iki temel yaklaşımı ele almaktadır: LINQ’un OrderBy
yönteminden yararlanma ve delegelerle List<T>.Sort
yöntemini kullanma. Her birinin güçlü ve zayıf yönlerini inceleyerek, özel ihtiyaçlarınız için en iyi yöntemi seçmenize yardımcı olacağız.
İçerik Tablosu
LINQ’un OrderBy
Yöntemini Kullanma
LINQ’un OrderBy
yöntemi, listeleri temiz ve okunabilir bir şekilde sıralamak için bir yol sağlar. Sıralama ölçütlerini belirtmek için lambda ifadeleri kullanır ve orijinal listeyi değiştirmeden yeni bir sıralanmış liste döndürür. Orijinal verileri korumak gerektiğinde bu idealdir.
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
public class Example
{
public static void Main(string[] args)
{
List<Person> people = new List<Person>()
{
new Person { Name = "Alice", Age = 30 },
new Person { Name = "Bob", Age = 25 },
new Person { Name = "Charlie", Age = 35 }
};
// Ada göre sırala (artan)
var sortedByName = people.OrderBy(p => p.Name).ToList();
Console.WriteLine("Ada Göre Sıralandı:");
PrintPeople(sortedByName);
// Yaşa göre sırala (azalan)
var sortedByAgeDescending = people.OrderByDescending(p => p.Age).ToList();
Console.WriteLine("nYaşa Göre Sıralandı (Azalan):");
PrintPeople(sortedByAgeDescending);
}
static void PrintPeople(List<Person> people)
{
foreach (var person in people)
{
Console.WriteLine($"{person.Name}, {person.Age}");
}
}
}
List<T>.Sort
ile Delegeleri Kullanma
Daha fazla kontrole ihtiyaç duyulan veya sıralama mantığının yeniden kullanılmasını gerektiren durumlar için delegeler güçlü bir alternatif sunar. List<T>.Sort
yöntemi, listeyi yerinde sıralar ve orijinal listeyi doğrudan değiştirir. Bu, çok büyük listeler için daha verimli olabilir, ancak orijinal verileri değiştirdiğini unutmayın.
using System;
using System.Collections.Generic;
// ... Yukarıdaki Person sınıfı ...
public class Example
{
public static void Main(string[] args)
{
List<Person> people = new List<Person>()
{
new Person { Name = "Alice", Age = 30 },
new Person { Name = "Bob", Age = 25 },
new Person { Name = "Charlie", Age = 35 }
};
// Delegeler kullanarak ada göre sırala (artan)
people.Sort((p1, p2) => p1.Name.CompareTo(p2.Name));
Console.WriteLine("Ada Göre Sıralandı (Yerinde):");
PrintPeople(people);
// Delegeler kullanarak yaşa göre sırala (azalan)
people.Sort((p1, p2) => p2.Age.CompareTo(p1.Age)); // Azalan için ters sırayı unutmayın
Console.WriteLine("nYaşa Göre Sıralandı (Azalan, Yerinde):");
PrintPeople(people);
}
// ... Yukarıdaki PrintPeople metodu ...
}
Doğru Yöntemi Seçme
En uygun yaklaşım, belirli gereksinimlerinize bağlıdır:
OrderBy
(LINQ): Orijinal listeyi korumak çok önemli olduğunda basit sıralama görevleri için idealdir. Genellikle daha okunabilirdir.List<T>.Sort
(delegelerle): Daha fazla kontrol sağlar ve orijinal listeyi değiştirmek kabul edilebilir olduğunda çok büyük listeler için daha verimli olabilir. Karmaşık karşılaştırma mantığı veya yeniden kullanılabilir sıralama işlevleri için kullanışlıdır.
Orijinal listenin sırasını korumanız gerekip gerekmediğini ve uygulamanız için performans etkilerini seçiminizi yapmadan önce dikkatlice değerlendirin.