C# Academy · Pelajaran

Materialisasi (ToList, ToDictionary) & catatan kinerja

Ubah kueri tertunda menjadi koleksi konkret dengan ToList/ToArray/ToDictionary; hindari enumerasi berulang dan pahami aturan keunikan kunci.

Pelajaran 2 dari 38 langkah

Materialisasi (ToList, ToDictionary) & catatan kinerja adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 3. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C# Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C# Academy mencakup 3 pelajaran total.

Mengapa melakukan materialisasi

Kueri tertunda dijalankan setiap kali Anda melakukan enumerasi.

  • Materialisasikan untuk membuat cuplikan keadaan
  • Hindari menjalankan ulang kueri mahal berkali-kali
  • Pilih List, larik, atau kamus sesuai kebutuhan

ToList / ToArray

ToList/ToArray menjalankan kueri sekali dan menyimpan hasilnya; perubahan sumber berikutnya tidak tercermin.

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
  public static void Main(string[] args)
  {
    List<int> data = new List<int>(new int[] { 1, 2, 3, 4 });

    var evensQuery = data.Where(x => x % 2 == 0);
    int[] evensArray = evensQuery.ToArray(); // snapshot now
    List<int> evensList = evensQuery.ToList(); // snapshot now

    data.Add(6); // changes after materialization

    Console.WriteLine("Array:");
    foreach (int x in evensArray) Console.WriteLine(x); // 2,4
    Console.WriteLine("List:");
    foreach (int x in evensList) Console.WriteLine(x);  // 2,4
  }
}

Dasar-dasar ToDictionary

ToDictionary mematerialisasikan hasil menjadi kamus<K,V>. Kunci harus unik; jika tidak, operasi ini akan menghasilkan kesalahan.

using System;
using System.Collections.Generic;
using System.Linq;

public sealed class City
{
  public string Name;
  public int Population;
  public City(string name, int pop){ Name = name; Population = pop; }
}

public class Program
{
  public static void Main(string[] args)
  {
    var cities = new City[]
    {
      new City("Oslo", 634000),
      new City("Rome", 2873000),
      new City("Riga", 605000)
    };

    Dictionary<string, int> byName = cities
      .ToDictionary(c => c.Name, c => c.Population);

    Console.WriteLine(byName["Rome"]); // 2873000
  }
}

Duplikat: ToLookup/GroupBy

Jika kunci dapat berulang, pilih ToLookup (kamus dengan banyak nilai) atau GroupBy, bukan ToDictionary.

using System;
using System.Collections.Generic;
using System.Linq;

public sealed class Item { public string Category; public string Name; public Item(string c, string n){ Category=c; Name=n; } }

public class Program
{
  public static void Main(string[] args)
  {
    var items = new Item[]
    {
      new Item("Food","Apple"),
      new Item("Food","Bread"),
      new Item("Tool","Hammer"),
      new Item("Tool","Wrench")
    };

    // If keys may repeat, use ToLookup (multi-value) or GroupBy
    var lookup = items.ToLookup(i => i.Category, i => i.Name);

    foreach (var g in lookup)
    {
      Console.WriteLine(g.Key + ":");
      foreach (var name in g) Console.WriteLine(" - " + name);
    }
  }
}

Hindari enumerasi berulang

Setiap enumerasi dapat menjalankan ulang pekerjaan. Materialisasikan sekali (misalnya, dengan ToList) jika Anda akan melakukan iterasi beberapa kali.

using System;
using System.Collections.Generic;
using System.Linq;

public static class Expensive
{
  public static IEnumerable<int> Numbers()
  {
    // Simulate expensive enumeration (prints when enumerated)
    for (int i = 1; i <= 3; i++)
    {
      Console.WriteLine("Produce " + i);
      yield return i;
    }
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    var query = Expensive.Numbers().Select(x => x * x);

    Console.WriteLine("First pass:");
    foreach (int x in query) Console.WriteLine(x);

    Console.WriteLine("Second pass (re-enumerates work):");
    foreach (int x in query) Console.WriteLine(x);

    Console.WriteLine("Cache with ToList:");
    List<int> cached = query.ToList(); // runs once
    foreach (int x in cached) Console.WriteLine(x); // no extra production logs
  }
}

Daftar periksa materialisasi

Daftar periksa:

  • Gunakan ToList/ToArray untuk membuat cuplikan keadaan.
  • Gunakan ToDictionary jika kunci unik; jika tidak, gunakan ToLookup/GroupBy.
  • Hindari enumerasi berulang pada sumber yang mahal diproses; lakukan penyimpanan sekali.
  • Materialisasikan di dekat batas (I/O, pemanggilan basis data) agar perilakunya dapat diprediksi.

Persyaratan ToDictionary

Pemeriksaan singkat: Apa yang harus benar saat menggunakan ToDictionary(keySelector) pada suatu urutan?

Ringkasan

Ringkasan: Materialisasikan dengan ToList/ToArray untuk membuat cuplikan keadaan, gunakan ToDictionary untuk pencarian cepat (kunci unik), dan simpan hasilnya agar kueri mahal tidak dijalankan ulang.

Gratis untuk memulai

Belajar C# dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
93
Pelajaran
346

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Materialisasi (ToList, ToDictionary) & catatan kinerja” gratis?

Ya — teks lengkap “Materialisasi (ToList, ToDictionary) & catatan kinerja” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C# Academy, upgrade ke CoddyKit PRO. Kursus C# Academy mencakup 3 pelajaran total.

Apa yang akan aku pelajari di “Materialisasi (ToList, ToDictionary) & catatan kinerja”?

Ubah kueri tertunda menjadi koleksi konkret dengan ToList/ToArray/ToDictionary; hindari enumerasi berulang dan pahami aturan keunikan kunci. Kamu berlatih C# Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai C# Academy?

Tidak diperlukan pengalaman sebelumnya. C# Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 3.

Berapa lama pelajaran “Materialisasi (ToList, ToDictionary) & catatan kinerja” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran C# Academy ini?

Ya. Setiap pelajaran C# Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. GroupBy, Join, Aggregate, proyeksi (tipe anonim)
  2. Materialisasi (ToList, ToDictionary) & catatan kinerja
  3. Kiat komposabilitas
← Kembali ke C# Academy