Materialisasi (ToList, ToDictionary) & catatan kinerja
Ubah kueri tertunda menjadi koleksi konkret dengan ToList/ToArray/ToDictionary; hindari enumerasi berulang dan pahami aturan keunikan kunci.
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
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.
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
- GroupBy, Join, Aggregate, proyeksi (tipe anonim)
- Materialisasi (ToList, ToDictionary) & catatan kinerja
- Kiat komposabilitas