C# Programming

C#’ta Nesne Listelerini Verimli Bir Şekilde Sıralama

Spread the love

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.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir