Örneklerle C# Koleksiyonları Eğitimi

⚡ Akıllı Özet

C#'da koleksiyonlar, nesne gruplarını depolamak ve yönetmek için esnek bir yol sağlar. Dizilerin aksine, koleksiyonlar çalışma zamanında büyür ve küçülür ve System.Collections ve System.Collections.Generic ad alanları, listeler, sözlükler, yığınlar ve kuyruklar için hazır türler sunar.

  • 🔃 Dinamik boyutlandırma: Koleksiyonlar, çalışma zamanında eleman ekler ve çıkarır; bu nedenle, bir dizi gibi boyutu önceden sabitlemenize gerek yoktur.
  • 📚 Ad alanları: System.Collections genel olmayan türleri, System.Collections.Generic ise tür güvenli genel türleri içerir.
  • 🧱 Temel dersler: ArrayList, Stack, Queue, Hashtable, SortedList ve BitArray, yaygın ve genel olmayan ihtiyaçları karşılar.
  • Genel güç: Liste, Sözlük, HashSet ve Kuyruk yapıları derleme zamanı tür güvenliği ve daha iyi performans sağlar.
  • 🔑 Doğru seçim: Anahtar aramaları için Sözlük, sıralı öğeler için Liste ve LIFO veya FIFO sıralaması için Yığın veya Kuyruk kullanın.
  • 🤖 Yapay zeka yardımı: GitHub Copilot, koleksiyon kodunun iskeletini oluşturur ve ML.NET işlem hatları, verileri genel koleksiyon türleri aracılığıyla iletir.

C#'da Koleksiyonlar

Önceki dersimizde C#'ta dizileri nasıl kullanabileceğimizi öğrendik. Hadi buna kısaca bir göz atalım. Programlamada diziler bir dizi ilgili nesneyi gruplandırmak için kullanılır. Böylece, tek bir değişken adıyla erişilebilen bir dizi veya bir Tamsayı kümesi oluşturulabilir.

C#'ta Koleksiyonlar Nedir?

Koleksiyonlar benzer Dizilerbir grup nesneyle çalışmanın daha esnek bir yolunu sağlar.

Dizilerde, dizideki öğe sayısını önceden tanımlamanız gerektiğini fark etmişsinizdir. Dizi bildirildiğinde bunun yapılması gerekiyordu.

Ancak bir koleksiyonda koleksiyonun boyutunu önceden tanımlamanıza gerek yoktur. Dilediğiniz zaman koleksiyona öğe ekleyebilir, hatta öğeleri kaldırabilirsiniz. Bu bölümde C#'ta mevcut olan farklı koleksiyonlarla nasıl çalışabileceğimize odaklanacağız.

System.Collections Sınıfları

.NET Framework, orijinal, genel olmayan koleksiyon sınıflarını System.Collections ad alanı içinde gruplandırır. Aşağıdaki tabloda, doğrudan kullanabileceğiniz başlıca türler özetlenmiştir.

Koleksiyon Açıklama
Dizi Listesi ArrayList koleksiyonu Dizilere benzer C#'ta veri türü. En büyük fark, dizi listesi koleksiyonunun dinamik yapısıdır.
Yığın Yığın, son giren ilk çıkar (LIFO) kavramını temsil eden özel bir koleksiyon türüdür.
kuyruklar Kuyruk, ilk giren ilk çıkar prensibini temsil eden özel bir durum koleksiyonudur.
hashtable'a Karma tablo, anahtar-değer çiftlerini depolamak için kullanılan özel bir veri kümesidir.
Sıralanmış Liste SortedList, anahtar/değer çiftlerini varsayılan olarak artan anahtar sırasına göre saklayan bir koleksiyondur.
bit dizisi Bit dizisi, bitleri saklayan bir veri yapısı dizisidir.

C#'da Genel Koleksiyonlar

Yukarıdaki genel olmayan sınıflar her öğeyi genel bir nesne olarak saklar; bu da derleyicinin türü kontrol edememesi ve programın değerlerin kutulanması için küçük bir bedel ödemesi anlamına gelir. Bunu çözmek için C#, her koleksiyonun tanımlanmış bir türe bağlı olduğu System.Collections.Generic ad alanını ekledi.

Liste gibi genel bir koleksiyon Yalnızca dizeleri kabul eder, bu nedenle hatalar derleme zamanında yakalanır ve bir öğeyi geri okurken tür dönüştürme gerekmez. Bu, genel koleksiyonları daha güvenli, daha hızlı ve okunması daha kolay hale getirir; bu nedenle modern C# kodunda varsayılan tercihtirler.

En yaygın genel koleksiyonlar aşağıda listelenmiştir:

  • Liste : Boyutu değiştirilebilir, indeks tabanlı bir liste olup, ArrayList'in genel amaçlı alternatifi.
  • Sözlük : Anahtar-değer çiftlerini hızlı, karma tabanlı aramalarla saklar.
  • Karma Küme : Yalnızca benzersiz değerler içerir ve birleşim gibi küme işlemlerini destekler.
  • Sıra : İlk giren ilk çıkar esasına göre çalışan bir koleksiyon türü, kuyruk sisteminin genel versiyonu.
  • Yığın : Son giren ilk çıkar esasına dayalı bir koleksiyon, Stack'in genel versiyonu.
  • Sıralı Liste : Anahtar-değer çiftlerini anahtara göre artan sırada sıralı tutar.

C# Liste Koleksiyonu Örneği

Liste, dinamik bir dizi gibi davrandığı için en yaygın kullanılan genel koleksiyon türüdür. Aşağıdaki örnek, dizelerden oluşan bir liste oluşturur, öğeler ekler ve çıkarır, boyutunu okur ve ardından kalan değerleri yazdırır. Kodun tamamı Program.cs dosyasında yazılmıştır.

) 1 Adım System.Collections.Generic ad alanını içe aktarın ve bir dize listesi tanımlayın.

) 2 Adım Add metodu ile öğe ekleyin ve Remove metodu ile bir öğeyi silin.

) 3 Adım Count özelliğini okuyun, ardından foreach döngüsü kullanarak listede ilerleyin.

using System;
using System.Collections.Generic;
namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args)
  {
   List<string> tutorials = new List<string>();
   tutorials.Add("Java");
   tutorials.Add("Python");
   tutorials.Add("Kotlin");
   tutorials.Remove("Python");
   Console.WriteLine(tutorials.Count);
   foreach (string tutorial in tutorials)
   {
    Console.WriteLine(tutorial);
   }
   Console.ReadKey();
  }
 }
}

Code Açıklama:-

  1. System.Collections.Generic ad alanı içe aktarılarak List türü programa erişilebilir hale getirildi.
  2. Yeni bir liste "Eğitimler" adı verilen bir klasör oluşturulur ve "Add" yöntemiyle üç isim eklenir.
  3. Remove yöntemi " değerini siler".PythonBu da listede iki madde kalmasına neden oluyor.
  4. `Count` özelliği öğe sayısını döndürür ve `foreach` döngüsü kalan her değeri sırayla yazdırır.

Program çalıştırıldığında, öncelikle sayısını yazdırır. 2, Ardından Java hem de Kotlin Ayrı satırlarda. Bu, bir koleksiyonun çalışma zamanında boyutunu nasıl değiştirdiğini gösterir; sabit bir dizi bunu yapamaz.

C#'da Diziler ve Koleksiyonlar Arasındaki Fark

Hem bir dizi Bir koleksiyon, birbiriyle ilişkili öğeleri tek bir isim altında gruplandırır; ancak program çalışmaya başladıktan sonra farklı davranırlar. Hangisini ne zaman kullanacağınızı bilmek, daha temiz ve verimli kod yazmanıza yardımcı olur.

Başlıca farklılıklar aşağıda listelenmiştir:

  • Alan: Bir dizinin uzunluğu tanımlama sırasında sabit olarak belirlenirken, bir koleksiyonun uzunluğu her zaman artabilir veya azalabilir.
  • Tip işleme: Bir dizi tek bir türü saklarken, bir koleksiyon jeneriklerle tür güvenli olabilir veya jenerik olmayan durumlarda karışık türdeki nesneleri tutabilir.
  • Lokasyon: Diziler dilin yapısına entegre edilmişken, koleksiyon sınıfları System.Collections ve System.Collections.Generic ad alanlarında yer almaktadır.
  • Dahili işlemler: Koleksiyonlar, öğeleri ekleme, kaldırma, arama ve sıralama için hazır yöntemler sunarken, diziler yalnızca temel dizinli erişim sağlar.
  • En iyi kullanım: Öğe sayısı biliniyor ve sabitse dizi, program çalışırken sayı değişiyorsa koleksiyon seçin.

Özetle, diziler sabit boyutlu veriler için en uygunudur, koleksiyonlar ise gerçek dünyadaki çoğu uygulamanın ihtiyaç duyduğu esnekliği sağlar.

SSS

Benzersiz bir anahtar (örneğin, bir kayda eşlenmiş bir kimlik) ile hızlı arama yapmanız gerektiğinde Sözlük kullanın. Sözlük, değerleri neredeyse sabit bir sürede bulurken, Liste öğeleri tek tek taramak zorundadır.

HashSet ve Dictionary, bir öğeye neredeyse sabit sürede ulaşmak için karma (hashing) kullandıkları için en hızlı arama işlemlerini sağlarlar. Liste veya dizi ise her öğeyi sırayla kontrol etmesi gerekebileceğinden daha yavaştır.

Eşzamanlı koleksiyonlar System.Collections.Concurrent ad alanında yer alır ve çoklu iş parçacıklı kod için tasarlanmıştır. ConcurrentDictionary ve BlockingCollection gibi türler, birden fazla iş parçacığının manuel kilitlere gerek kalmadan güvenli bir şekilde öğe eklemesine ve kaldırmasına olanak tanır.

IEnumerable, yalnızca foreach döngüsüyle öğeleri okumayı destekleyen temel arayüzdür. ICollection ise bunu genişletir ve Count, Add ve Remove gibi üyeler ekleyerek koleksiyonu değiştirmeyi de destekler.

Liste, tek bir tanımlanmış türü depolayan, genel ve tür güvenli bir koleksiyondur; bu da derleme zamanı kontrolleri ve daha iyi performans sağlar. ArrayList ise genel olmayan bir yapıdır ve her öğeyi bir nesne olarak depolar; bu da tür dönüştürme gerektirir ve farklı türlerin bir arada kullanılmasına izin verir.

Bir yığın (Stack), son giren ilk çıkar (LIFO) prensibiyle çalışır; bu nedenle en yeni öğe önce Pop fonksiyonu kullanılarak kaldırılır. Bir kuyruk (Queue) ise ilk giren ilk çıkar (FIFO) prensibiyle çalışır; bu nedenle en eski öğe önce Dequeue fonksiyonu kullanılarak kaldırılır.

Evet. GitHub Copilot, doğru koleksiyon türünü önerebilir, öğeleri ekleyen veya filtreleyen döngüler oluşturabilir ve kısa bir yorumdan LINQ sorgularını tamamlayabilir; bu da listeler, sözlükler ve diğer koleksiyonlarla çalışmayı hızlandırır.

ML.NET, List ve IEnumerable gibi koleksiyonlar aracılığıyla eğitim verilerini besler ve bu koleksiyonlar IDataView işlem hattına eşlenir. Örnekleri güçlü tipli genel bir koleksiyonda saklamak, makine öğrenimi iş akışını açık ve tür güvenli tutar.

Bu yazıyı şu şekilde özetleyin: