0Pricing
C# Academy · Ders

Koleksiyon Seçme

Ödünleşimleri ve performansı öğrenin.

Koleksiyon Seçme, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 4 dersinin 4. 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.

Önce Tek Bir Soru

Bir koleksiyon seçmek tek bir soruyla başlar: verilere nasıl erişeceksiniz? Konuma göre mi, anahtara göre mi, yoksa yalnızca üyeliği mi denetleyeceksiniz?

List, Dictionary ve HashSet farklı erişim biçimlerine karşılık gelir. Araca erişim biçimine göre karar verirseniz kodunuz hızlı ve anlaşılır kalır.

Konuma Göre Erişim: Liste

Sıra önemliyse ve öğelere dizinle erişiyorsanız List<T> seçin. Ekleme sırasını korur ve O(1) maliyetle dizinlemeye olanak tanır.

Örnekler: adımlar kuyruğu, görüntülenme sırasındaki satırlar veya baştan sona yinelediğiniz herhangi bir dizi. Yinelenenlere izin verilir.

var steps = new List<string> { "mix", "bake", "cool" };
string first = steps[0]; // O(1) by index

Anahtara Göre Erişim: Sözlük

Öğelere benzersiz bir tanımlayıcıyla erişiyorsanız Dictionary<K,V> seçin. Anahtarı değere ortalama O(1) maliyetle eşler.

Örnekler: kullanıcı kimliğinden kullanıcıya, ülke kodundan ada ve sözcükten sayımına eşleme. Anahtar "hangisi" sorusunu yanıtlar, değer ise veriyi taşır.

var users = new Dictionary<int, string> {
    [101] = "Ann",
    [102] = "Bob"
};
string name = users[101];

Üyelik ve Benzersizlik: HashSet

Yalnızca bir değerin mevcut olup olmadığını önemsiyorsanız veya yinelenenleri reddetmeniz gerekiyorsa HashSet<T> seçin. Contains ortalama O(1) maliyetindedir.

Örnekler: ziyaret edilen URL'ler, izin verilen yetkiler ve birbirinden farklı etiketler. Bir öğeye bağlı bir değer yoktur; yalnızca öğenin varlığı söz konusudur.

var visited = new HashSet<string>();
if (visited.Add(url)) {
    // first time seeing this url
}

Maliyet Tablosu

Ortalama maliyetler şöyledir: List dizinlemesi O(1), ancak Contains O(n) maliyetindedir. Dictionary ve HashSet araması O(1) maliyetindedir.

Sona yapılan List.Add işlemi itfa edilmiş O(1) maliyetindedir; ortasına ekleme veya ortasından kaldırma O(n) maliyetindedir. Dictionary ve HashSet ekleme ve kaldırma işlemleri ortalama O(1) maliyetindedir.

// List:       index O(1),  Contains O(n)
// Dictionary: by-key O(1), no index
// HashSet:    Contains O(1), no value, no index

Liste İçinde Contains Kullanımı Bir Kod Kokusudur

Bir döngü içinde tekrar tekrar list.Contains çağırmak, O(n kare) maliyetli bir tuzaktır. Her denetim listenin tamamını tarar.

Üyelik denetimleri baskınsa HashSet'e geçin. Bu tek değişiklik, büyük verilerde ağır çalışan bir döngüyü anında çalışan bir döngüye dönüştürebilir.

using System;
using System.Collections.Generic;

class Program {
    static void Main() {
        var allow = new HashSet<int> { 2, 4, 6 };
        foreach (int n in new[] { 1, 2, 3, 4 })
            if (allow.Contains(n)) Console.Write(n + " ");
    }
}

Hem Anahtara Hem de Sıraya İhtiyaç Duyduğunuzda

Anahtar aramasına ek olarak öngörülebilir bir sıraya mı ihtiyacınız var? Standart Dictionary sıra garantisi vermez.

Sıra için bir List'i, arama için bir Dictionary'yi birlikte tutmayı düşünün veya anahtarları O(log n) maliyetle sıralı tutan SortedDictionary<K,V> kullanın.

var sorted = new SortedDictionary<string, int>();
sorted["b"] = 2;
sorted["a"] = 1;
// enumerates a then b, in key order

Bellek Kullanımı Karşılığında Hız

Karma tabanlı koleksiyonlar hız karşılığında bellek kullanır. Dictionary ve HashSet dahili bölmeler tutar; bu nedenle sıkı bir List'ten veya diziden daha fazla bellek kullanır.

Bir avuç öğeden oluşan küçük koleksiyonlarda liste taraması aslında yeterli olabilir ve daha az bellek kullanır. Karma işlemlerinin avantajı ölçek büyüdüğünde ortaya çıkar.

Arayüzlere Göre Program Tasarlama

Yöntem imzaları, çalışan en az özel türü istemelidir. Okumak için IEnumerable<T>, dizinli okumalar için IReadOnlyList<T>, anahtar erişimi için IDictionary<K,V> kabul edin.

Bu, çağıranları somut seçiminize bağımlı olmaktan çıkarır ve imzaları bozmadan uygulamaları daha sonra değiştirmenize olanak tanır.

int Sum(IEnumerable<int> values) {
    int total = 0;
    foreach (int v in values) total += v;
    return total;
}

Uygulamalı Bir Örnek

Metindeki benzersiz sözcükleri saymak için iki koleksiyon birlikte kullanılır. Bir HashSet görülen sözcükleri izler; bir Dictionary ise sayımları tutar.

Her biri tek bir işi iyi yapar: küme benzersizliği zorunlu kılar, sözlük sözcüğü sıklığına eşler ve her iki işlem de ortalama O(1) maliyetindedir.

using System;
using System.Collections.Generic;

class Program {
    static void Main() {
        var counts = new Dictionary<string, int>();
        foreach (var w in "a b a c b a".Split(' '))
            counts[w] = counts.GetValueOrDefault(w) + 1;
        Console.WriteLine(counts["a"]); // 3
    }
}

Karar Kontrol Listesi

Sırayla şu soruları sorun: Anahtardan değere bir eşleme gerekiyor mu? Dictionary kullanın. Yalnızca benzersizlik veya üyelik mi gerekiyor? HashSet kullanın.

Aksi durumda sıra ve dizin erişimi, muhtemelen yinelenenlerle birlikte mi gerekiyor? List kullanın. Bu kısa kontrol listesi günlük durumların çoğunu kapsar.

Hızlı Kontrol

Karar kontrol listesini somut bir ihtiyaca uygulayın.

Özet

Erişim biçimine göre seçim yapın: sıralı ve dizinli diziler için List; anahtardan değere arama için Dictionary; benzersizlik ve üyelik için HashSet.

Büyük O gösterimini göz önünde bulundurun: sık çalıştırılan döngülerde List.Contains kullanmaktan kaçının, O(1) maliyetli karma aramalarından yararlanın ve seçiminizin esnek kalması için arayüzlere göre program yazın.

Sıkça Sorulan Sorular

“Koleksiyon Seçme” dersi ücretsiz mi?

Evet — “Koleksiyon Seçme” 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.

“Koleksiyon Seçme” dersinde ne öğreneceğim?

Ödünleşimleri ve performansı öğrenin. 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 4. dersidir.

“Koleksiyon Seçme” 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