0Pricing
C# Academy · Ders

Uygulamada Liste

Ekleyin, kaldırın ve arayın.

Uygulamada Liste, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 4 dersten oluşur.

List<T> Neden Kullanılır?

List<T>, C# dilindeki günlük kullanıma uygun dinamik dizidir. System.Collections.Generic içinde bulunur ve öğe ekledikçe otomatik olarak büyür.

Normal bir dizinin aksine, baştan sabit bir boyut belirlemeniz gerekmez. Tür güvenlidir: List<int> yalnızca int değerlerini tutar ve bu durum derleme zamanında yakalanır.

using System.Collections.Generic;

List<int> scores = new List<int>();
scores.Add(90);
scores.Add(85);

Oluşturma ve Başlatma

Bir koleksiyon başlatıcısı kullanarak bir listeyi hemen doldurabilirsiniz. Bu kullanım kısa ve okunabilirdir.

Derleyici, her girdiyi arka planda bir Add çağrısına dönüştürür; bu nedenle sonuç, öğeleri tek tek eklemekle tamamen aynıdır.

using System;
using System.Collections.Generic;

class Program {
    static void Main() {
        var fruits = new List<string> { "apple", "pear", "plum" };
        Console.WriteLine(fruits.Count);
    }
}

Dizinleme ve Öğe Sayısı

Öğelere tıpkı bir dizide olduğu gibi sıfır tabanlı dizinle erişin. list[0] ilk öğedir.

Listenin kaç öğe tuttuğunu öğrenmek için Length değil, Count kullanın. Dizinle okuma veya yazma, O(1) sabit zamanlıdır.

using System;
using System.Collections.Generic;

class Program {
    static void Main() {
        var nums = new List<int> { 10, 20, 30 };
        Console.WriteLine(nums[1]);
        Console.WriteLine(nums.Count);
    }
}

Ekleme ve Araya Yerleştirme

Add, ortalama O(1) zamanda sona ekler. AddRange aynı anda birçok öğe ekler.

Insert(index, item) bir öğeyi belirli bir konuma yerleştirir ve ondan sonraki her şeyi kaydırır. Bu kaydırma, başa yapılan Insert işlemini O(n) hâline getirir; bu nedenle mümkün olduğunda sona eklemeyi tercih edin.

var list = new List<string> { "b", "c" };
list.Insert(0, "a");
list.AddRange(new[] { "d", "e" });
// list is now a, b, c, d, e

Öğeleri Kaldırma

Remove(item) eşleşen ilk değeri siler ve değer bulunursa true döndürür. RemoveAt(index) konuma göre siler.

Her ikisi de sonraki öğeleri sola kaydırdığı için ortadan kaldırma işlemi O(n) olur. RemoveAll bir koşul alır ve tek geçişte tüm eşleşmeleri kaldırır.

using System;
using System.Collections.Generic;

class Program {
    static void Main() {
        var nums = new List<int> { 1, 2, 3, 4, 5 };
        nums.RemoveAll(n => n % 2 == 0);
        Console.WriteLine(string.Join(",", nums));
    }
}

Listede Arama

Contains bir değerin var olup olmadığını söyler; IndexOf ise konumunu veya -1 değerini verir. Her ikisi de doğrusal olarak tarar ve O(n) maliyetindedir.

Büyük bir listede değere göre kendinizi tekrar tekrar arama yaparken buluyorsanız bu doğrusal maliyet birikir. Bir HashSet veya Dictionary daha uygun olabilir.

var names = new List<string> { "Ann", "Bob", "Cy" };
bool hasBob = names.Contains("Bob");   // true
int pos = names.IndexOf("Cy");          // 2

Yineleme

Her öğeyi okumak için foreach döngüsü en anlaşılır yoldur. Dizin gerektiğinde klasik bir for döngüsü de kullanabilirsiniz.

Aynı liste üzerinde çalışan bir foreach içinde öğe eklemeyin veya kaldırmayın; bu işlem InvalidOperationException oluşturur.

using System;
using System.Collections.Generic;

class Program {
    static void Main() {
        var colors = new List<string> { "red", "green", "blue" };
        foreach (var c in colors)
            Console.WriteLine(c);
    }
}

Sıralama

Sort(), varsayılan karşılaştırıcıyı kullanarak listeyi yerinde sıralar. Özel bir sıralama için bir karşılaştırma temsilcisi geçirin.

Sıralama O(n log n) maliyetindedir. original değeri değiştirmeden sıralanmış bir copy elde etmek için yeni bir dizi döndüren LINQ içindeki OrderBy yöntemini kullanın.

using System;
using System.Collections.Generic;

class Program {
    static void Main() {
        var nums = new List<int> { 4, 1, 3, 2 };
        nums.Sort();
        Console.WriteLine(string.Join(",", nums));
    }
}

Kapasite ve Öğe Sayısı

Count mevcut öğelerin sayısıdır; Capacity ise dahili dizisini yeniden tahsis etmeden önce tutabileceği öğe sayısıdır.

Liste kapasiteyi aştığında daha büyük bir dizi tahsis eder ve öğeleri yaklaşık iki katı büyüklüğe kopyalar. Son boyutu biliyorsanız, tekrarlanan kopyalamaları önlemek için bu boyutu oluşturucuya geçirin.

var list = new List<int>(1000); // reserve capacity
for (int i = 0; i < 1000; i++)
    list.Add(i);
// no intermediate reallocations

Yöntem Argümanı Olarak Liste

Bir List<T> başvuru türüdür. Bir yönteme geçirildiğinde başvurusu aktarılır; bu nedenle yöntemin içindeki değişiklikler çağıranın listesini etkiler.

Bir yöntem yalnızca okuma yapıyorsa, onu değiştirmeyeceğinizi belirtmek için IEnumerable<T> veya IReadOnlyList<T> kabul edin.

using System;
using System.Collections.Generic;

class Program {
    static void AddOne(List<int> xs) => xs.Add(1);
    static void Main() {
        var nums = new List<int>();
        AddOne(nums);
        Console.WriteLine(nums.Count); // 1
    }
}

Dönüştürme ve Kopyalama

ToArray() sabit boyutlu bir dizi üretir; new List<T>(other) başka bir dizinin sığ bir copy'sini oluşturur.

Sığ bir copy, liste yapısını çoğaltır ancak aynı öğe başvurularını paylaşır; bu nedenle içerilen bir nesneyi değiştirmek her iki listede de görünür.

var original = new List<int> { 1, 2, 3 };
int[] arr = original.ToArray();
var copy = new List<int>(original);

Hızlı Kontrol

Maliyeti belirgin biçimde farklı olan işlemi seçin.

Özet

List<T> büyüyebilen, tür güvenli bir dizidir. Dizinle erişim ve Count O(1), sona yapılan Add işlemi ise ortalama O(1) maliyetindedir.

Ortaya ekleme, ortadan kaldırma ve değere göre arama, kaydırma veya tarama nedeniyle O(n) maliyetindedir. Boyut biliniyorsa yeniden tahsisleri önlemek için kapasiteyi önceden ayırın.

Sıkça Sorulan Sorular

“Uygulamada Liste” dersi ücretsiz mi?

Evet — “Uygulamada Liste” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 4 dersten oluşur.

“Uygulamada Liste” dersinde ne öğreneceğim?

Ekleyin, kaldırın ve arayın. C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C# Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“Uygulamada Liste” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Uygulamada Liste
  2. Sözlük Aramaları
  3. HashSet ve Benzersizlik
  4. Koleksiyon Seçme
← C# Academy Sayfasına Dön