C# Listesini Anlamak
[[academy-video-youtube({"vid":"3_rlZKJoFPs", "start_time":"0", "title":"Understanding C# List", "creator":"Layla Porter", "length":"14m 6s"})]]
C#'ta, List sınıfı, çok yönlü bir koleksiyon türüdür. İçsel veri yapısı olarak bir dinamik diziye dayanır, elemanların etkin bir şekilde manipüle edilmesine olanak tanır. Bir Liste oluşturduğunuzda, baştan belleği optimize etmek için varsayılan bir başlangıç kapasitesini belirtebilirsiniz. Bu kapasite, listenin başlangıçta bellek yeniden tahsis edilmeden kaç elemanı tutabileceğidir.
Layla Porter'ın C# listelerinin işlevselliğine derinlemesine daldığı "C# for Beginners Part 7 - Querying Data with LINQ" videosunda, verileri etkin bir şekilde sorgulamak için LINQ (Dil Entegre Sorgusu) nasıl kullanılacağını gösterir. Bu makale, Layla'nın videosundaki temel kavramları ve örnekleri parçalayarak, C# listeleri için kapsamlı bir başlangıç sağlar.
C# Listelerine Giriş
Layla, videosunun başında (0:03) belirttiği gibi, C#'ta bir liste, geliştiricilerin bir eleman koleksiyonunu depolamasını ve manipüle etmesini sağlayan çok yönlü bir veri yapısıdır. Dizilerin aksine, listeler dinamik olarak boyutlandırılabilir, bu da eleman sayısının başlangıçta bilinmediği durumlar için idealdir.
Bir Liste kullanmak basittir. Belirtilen nesneyi listenin sonuna ekleyen Add yöntemiyle eleman ekleyebilirsiniz. Liste sıfır bazlı bir indeksi kullanır, yani ilk eleman 0 indeksinde erişilir. Ayrıca köşeli parantezler ([]) notasyonu kullanarak belirtilen bir indeksle elemanlara erişebilirsiniz.
Listeyi iterasyon yapmak için, her elemanın bulundukları sırayla üstünden geçen bir foreach döngüsü kullanabilirsiniz. Belirli bir elemanın ilk ortaya çıkışını bulmanız gerekiyorsa, belirtilen bir koşula dayalı olarak arama yapan bir öngörün ile IndexOf gibi yöntemleri kullanabilirsiniz.
Liste güçlü bir şekilde tip belirlenmiştir, bu da belirli bir türde (T) nesneleri tuttuğu anlamına gelir. Bu, tür güvenliğini sağlar ve belirtilen nesne türü tarafından tanımlanan özellikler ve yöntemlerin kullanımını etkinleştirir. Varsayılan olarak listenin etkin bir şekilde elemaları düzenlemek için varsayılan bir karma fonksiyonu kullanır.
Layla'nın videosunda gösterildiği gibi, Listenin ve Liste sınıfı yöntemlerinin çalışmasına yakından bakalım.
Bir Liste Oluşturma
C#'ta bir liste oluşturduğunuzda, iç veri yapısını optimize etmek için belirtilen bir başlangıç kapasitesini ayarlayabilirsiniz. Listeler çok yönlüdür ve belirli bir eleman koleksiyonundan başlatılabilir. Öğelere bir int indeks kullanarak erişebilir ve foreach döngüsü ile bunları yineleyebilirsiniz. Sözlüklerden farklı olarak, listeler varsayılan bir karma fonksiyonuna dayanmazlar ve güçlü bir şekilde tür belirlenmiş nesneleri depolayarak verilerinizin yönetiminde tür güvenliği ve tutarlılık sağlarlar.
(0:44)'te Layla, listenin nasıl başlatılacağını ve doldurulacağını gösteren bir peynir listesi oluşturur. C#'ta bir liste, içindeki eleman türünü temsil eden T ile List sınıfı kullanılarak oluşturulabilir.
List<Cheese> cheeseList = new List<Cheese>
{
new Cheese(1, "Stilton", 3.0m, 5),
new Cheese(2, "Cheddar", 2.25m, 3),
new Cheese(3, "Pineapple", 3.5m, 1),
new Cheese(4, "Brie", 5.5m, 2),
new Cheese(5, "Roquefort", 3.5m, 5),
};List<Cheese> cheeseList = new List<Cheese>
{
new Cheese(1, "Stilton", 3.0m, 5),
new Cheese(2, "Cheddar", 2.25m, 3),
new Cheese(3, "Pineapple", 3.5m, 1),
new Cheese(4, "Brie", 5.5m, 2),
new Cheese(5, "Roquefort", 3.5m, 5),
};Yukarıdaki örnekte, Layla List<Cheese> oluşturmak için koleksiyon başlatıcı sözdizimini kullanarak, listeyi Cheese nesneleriyle tanımlar ve doldurur. Her peynir nesnesi için ID, ad, fiyat ve güç gibi özellikler belirleyerek, C#'ta bir listenin oluşturulması ve başlatılmasının gösterimini yapar.
Peynir Listesini Taramak için ID ve Adı Yazdırmak
Layla Porter, cheeseList üzerinden dönmek için bir foreach döngüsü nasıl kullanılacağını ve her peyniri ID ve Ad ile yalnızca nasıl yazdırılacağını gösterir. Aşağıda kodla birlikte bir açıklama bulunmaktadır:
foreach (var cheese in cheeseList)
{
Console.WriteLine($"ID: {cheese.ID}, Name: {cheese.Name}");
}foreach (var cheese in cheeseList)
{
Console.WriteLine($"ID: {cheese.ID}, Name: {cheese.Name}");
}Yukarıdaki kodda, Layla cheeseList üzerinde dolaşmak için bir foreach döngüsü kullanır. Bu, listenin tüm elemanlarını yazdırır. Döngü, listedeki her Cheese nesnesi üzerinden geçer. Her iterasyonda, cheese değişkeni belirtilen indisteki mevcut Cheese nesnesini tutar. C#'ta bir listeden belirli elemanlara nasıl erişip göstereceğini göstererek, peynirin her elemanının ID ve Ad özelliklerini Console.WriteLine kullanarak yazdırır.
LINQ Sorgusunu Kullanarak Peynir Arama
Layla Porter, 2:45'teki videoda kullanıcının girdisine dayalı olarak belirli bir peyniri nasıl arayacağını gösterir. Kullanıcıdan peynir adını almak için ReadLine metodunu kullanır:
string cheeseName = Console.ReadLine();string cheeseName = Console.ReadLine();Liste'de bir öğe ararken, Layla 2:51'de çok önemli bir anahtar noktayı vurgular. Eğer LINQ kullanmasaydık, kullanıcı girişiyle eşleşen bir adı bulmak için koleksiyonumuzdaki her peynir üzerinde manuel olarak döngü yapmamız gerekecekti, ancak LINQ'nun yardımcı kütüphaneleri bu süreci daha verimli hale getirir. Aşağıdaki kod parçacığı, Layla'nın (3:40) sadece LINQ sorgu sözdizimini kullanarak for döngüsü kullanmadan liste öğeleri arasında nasıl iterasyon yaptığını gösterir:
if (cheeseList.Any(cheese => cheese.Name == cheeseName))
{
Cheese cheese = cheeseList.FirstOrDefault(c => c.Name == cheeseName);
Console.WriteLine($"{cheese.Name} cheese costs £{cheese.Price.ToString()} and has a strength of {cheese.Strength}.");
}
else
{
Console.WriteLine("I'm sorry, we don't have that cheese.");
}if (cheeseList.Any(cheese => cheese.Name == cheeseName))
{
Cheese cheese = cheeseList.FirstOrDefault(c => c.Name == cheeseName);
Console.WriteLine($"{cheese.Name} cheese costs £{cheese.Price.ToString()} and has a strength of {cheese.Strength}.");
}
else
{
Console.WriteLine("I'm sorry, we don't have that cheese.");
}Yukarıdaki kodda:
Layla, listeyi manuel olarak taramak yerine, daha verimli bir arama için LINQ kullanabileceğimizi açıklıyor.
Anymetodu, listedeki herhangi bir peynirin kullanıcı tarafından girilen adla eşleşip eşleşmediğini kontrol eder.Eğer bir eşleşme bulunursa, bu elemanın var olduğu anlamına gelir,
FirstOrDefaultmetodu, girilen adla eşleşen ilk peyniri getirir. Bu yöntem güvenlidir çünkü eşleşme bulunmazsa null döndürür ve potansiyel hataları önler.- Eğer peynir bulunursa, Adı, Fiyatı ve Gücü yazdırılır. Bulunmazsa, peynirin bulunmadığına dair bir mesaj gösterilir.
Bu yaklaşım, C#'ta koleksiyonları ararken LINQ'nun etkinliğini ve basitliğini gözler önüne serer. Kod parçacığının çıktısı 7:19'da gösterilmiştir: (Aşağıdakinden daha iyi bir resim mi?)

Arama Sırasında Harf Duyarlılığını Yönetme
Layla, 8:00'de dizelerle çalışırken, onların büyük harf-küçük harf duyarlı olduğunu hatırlamanın önemli olduğunu hatırlatır. Peynir adlarındaki karşılaştırmalarımızın büyük-küçük harf duyarsız olması için kullanıcı girdiğini ve listemizdeki peynir adlarını .ToLower() metodunu kullanarak küçük harfe dönüştürmemiz gerekir. Bu, kullanıcının herhangi bir türde büyük harf kullanma imkanı tanır ve kodumuz yine de doğru peynirle eşleşir. Unutmayın ki dize harf duyarlılığı can sıkıcı olabilir, bu yüzden onu doğru şekilde yönetmek çok önemlidir.
Pratik Örnek: Peynirleri Güçlerine Göre Sorgulama
Layla 8:50'de, kullanıcıların peynirleri güçlerine göre filtreleyebileceği pratik bir örnek yapıyor, kullanıcının girdisiyle LINQ sorgularını nasıl birleştirileceğini gösteriyor.
1. Kullanıcı Girişi İstemci ve Kaydı
Console.WriteLine("What strength cheese are you interested in - choose between 1 and 5");
string strengthString = Console.ReadLine();Console.WriteLine("What strength cheese are you interested in - choose between 1 and 5");
string strengthString = Console.ReadLine();8:00'de Layla, kullanıcıdan 1 ile 5 arasında bir güç değeri seçmesini isteyerek başlar. Bu, basit bir Console.WriteLine ile giriş istemek ve ardından Console.ReadLine() ile yazdıklarını almakla yapılır.
2. Girdi İnt'e Dönüştürme
bool isInt = int.TryParse(strengthString, out int strength);bool isInt = int.TryParse(strengthString, out int strength);Sonra 9:16'da girdilerinin gerçek bir numara olduğundan emin oluyor. Bunun için int.TryParse kullanmayı tavsiye eder. Girdi doğruysa ve başarıyla bir tam sayıya dönüştürülürse, harika! Değilse, bunu nazikçe ele alabiliriz.
3. Peynirleri Güçlerine Göre Filtreleme
List<Cheese> cheeseByStrength = cheeseList.Where(c => c.Strength == strength).ToList();List<Cheese> cheeseByStrength = cheeseList.Where(c => c.Strength == strength).ToList();Şimdi, Layla'nın videosunda 10:25'de eğlenceli kısım başlıyor. Burada, peynir listemizi cheeseList yani LINQ kullanarak nasıl filtreleyeceğimizi gösterir. LINQ'un Where metodu ve hızlı bir lambda ifadesi (c => c.Strength == strength) ile kullanıcının seçtiği güçle eşleşen peynirleri sadece çıkarır. Bu bize yeni bir liste, cheeseByStrength verir.
4. Filtreli Peynirleri Çıktı Olarak Verme
foreach (var cheese in cheeseByStrength)
{
Console.WriteLine($"Name: {cheese.Name} cheese");
}foreach (var cheese in cheeseByStrength)
{
Console.WriteLine($"Name: {cheese.Name} cheese");
}Son olarak 12:03'de, işleri güzel bir şekilde toparlamak için, Layla bir foreach döngüsü ile cheeseByStrength üzerinde dolaşır. Bu listedeki her peynir için, Console.WriteLine'de belirtilen önermeyi kullanarak adını yazdırır. Basit ve etkili!
12:17'de programı çalıştırırken, Layla kullanıcının bir güç değeri girdiği ve listenin yalnızca belirtilen güçteki peynirleri gösterecek şekilde filtrelendiğini göstermektedir. Örnek çıktı aşağıda gösterilmiştir: (Daha iyi bir resim mi mümkün?)

Sonuç
Layla'nın videosu C# listelerinin ve LINQ kullanarak nasıl sorgulanacaklarını etkili bir şekilde tanıtıyor. Onun örneklerini ve açıklamalarını takip ederek, yeni başlayanlar C#'ta listelerle çalışmanın ve verileri sorgulamanın sağlam bir temelini kazanabilir. Daha fazla ayrıntı ve canlı kod oturumları için Layla'nın YouTube kanalına göz atın ve canlı yayınlarına katılın.
Listedeki sınıfın Count özelliği, Insert metodu, önerme fonksiyonları ve daha fazlası gibi çeşitli yöntem ve özellikleri keşfetmeyi, liste anlamanızı ve etkili bir şekilde manipüle etme yeteneğinizi artırmayı unutmayın.



