C#, dizileri sıralamak için güçlü ve çok yönlü yöntemler sunar. Bu kılavuz, basit tamsayı dizilerinden karmaşık nesne dizilerine kadar çeşitli senaryoları ele alarak C#’ın sıralama yeteneklerinin gücünü ve esnekliğini göstermektedir.
İçindekiler
- Array.Sort() Anlamak
- Dize Dizilerini Sıralama
- Özel Karşılaştırmalar
- Nesne Dizilerini Sıralama
- Sıralama için LINQ
- Performans Hususları
- Sonuç
- SSS
Array.Sort() Anlamak
Array.Sort()
yöntemi, C#’ta dizi sıralamada temel taşını oluşturur. Çeşitli veri türlerini ve sıralama gereksinimlerini karşılamak için çeşitli aşırı yüklemeler sağlar. Öncelikle hızlı sıralama algoritması kullanan bu yöntem, dizileri yerinde verimli bir şekilde sıralar ve kopyası oluşturmadan orijinal diziyi doğrudan değiştirir.
int[] numbers = { 5, 2, 8, 1, 9, 4 };
Array.Sort(numbers); // Arttırma sırası
Console.WriteLine(string.Join(", ", numbers)); // Çıktı: 1, 2, 4, 5, 8, 9
Bu temel örnek, bir tamsayı dizisiyle Array.Sort()
‘u göstermektedir. Dizi, yerinde artan sıraya göre sıralanır.
Dize Dizilerini Sıralama
Dize dizilerini sıralamak aynı derecede basittir. Array.Sort()
varsayılan olarak leksikografik (alfabetik) sırayı kullanır.
string[] names = { "David", "Alice", "Charlie", "Bob" };
Array.Sort(names);
Console.WriteLine(string.Join(", ", names)); // Çıktı: Alice, Bob, Charlie, David
Özel Karşılaştırmalar
Daha ince bir kontrol için, delegeler veya lambda ifadeleri kullanan özel karşılaştırmalar çok değerlidir. Bu, belirli özelliklere göre nesneleri sıralarken veya standart dışı sıralama kullanırken çok önemlidir.
int[] numbers = { 5, 2, 8, 1, 9, 4 };
Array.Sort(numbers, (x, y) => y.CompareTo(x)); // Azalan sıra
Console.WriteLine(string.Join(", ", numbers)); // Çıktı: 9, 8, 5, 4, 2, 1
(x, y) => y.CompareTo(x)
lambda ifadesi karşılaştırmayı tersine çevirir ve azalan sırayı oluşturur.
Nesne Dizilerini Sıralama
Nesne dizilerini sıralamak, sıralama özelliğinin belirtilmesini gerektirir. Özel bir karşılaştırma şarttır.
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
Person[] people = {
new Person { Name = "Bob", Age = 30 },
new Person { Name = "Alice", Age = 25 },
new Person { Name = "Charlie", Age = 35 }
};
Array.Sort(people, (x, y) => x.Age.CompareTo(y.Age)); // Yaşa göre sıralama
foreach (var person in people)
{
Console.WriteLine($"{person.Name} - {person.Age}");
}
Sıralama için LINQ
Daha karmaşık senaryolar için veya List<T>
ile çalışırken, LINQ güçlü sıralama yetenekleri sağlar. OrderBy()
ve OrderByDescending()
, özel karşılaştırıcılarla esnek sıralama sunar.
List<Person> peopleList = people.ToList();
var sortedPeopleByName = peopleList.OrderBy(p => p.Name);
foreach (var person in sortedPeopleByName)
{
Console.WriteLine($"{person.Name} - {person.Age}");
}
Performans Hususları
Array.Sort()
genellikle verimli olsa da, son derece büyük dizilerle uğraşırken veri boyutunu ve karşılaştırmanın karmaşıklığını göz önünde bulundurun. Çok büyük veri kümeleri için, performansı iyileştirmek üzere özel sıralama algoritmaları veya paralel işlem tekniklerini araştırmak gerekebilir.
Sonuç
C#’ın dizi sıralama mekanizmaları, çeşitli veri türleri ve sıralama ihtiyaçları için oldukça etkilidir. Özel karşılaştırmaları öğrenmek ve uygun olduğunda LINQ’u kullanmak, uygulamalarınızda verimli ve esnek sıralama sağlar.
SSS
- S:
Array.Sort()
kararlı mıdır? C: Evet, kararlı bir sıralamadır; eşit elemanların göreli sırası korunur. - S:
Array.Sort()
hangi algoritmayı kullanır? C: Genellikle hızlı sıralama veya içgörülü bir sıralama varyantı kullanır ve veriye bağlı olarak en verimli algoritmayı dinamik olarak seçer. - S:
List<T>
nasıl sıralanır? C:List<T>.Sort()
veya LINQ’unOrderBy()
/OrderByDescending()
yöntemlerini kullanın.