0Pricing
C# Academy · บทเรียน

การสร้างคอลเลกชัน (ToList, ToDictionary) และข้อควรรู้ด้านประสิทธิภาพ

แปลงคิวรีที่ทำงานแบบเลื่อนเวลาให้เป็นคอลเลกชันจริงด้วย ToList/ToArray/ToDictionary หลีกเลี่ยงการวนซ้ำหลายครั้ง และทำความเข้าใจกฎเรื่องคีย์ที่ไม่ซ้ำกัน

การสร้างคอลเลกชัน (ToList, ToDictionary) และข้อควรรู้ด้านประสิทธิภาพ เป็นบทเรียน C# Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C# Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C# Academy มีบทเรียนทั้งหมด 3 บทเรียน

เหตุผลที่ควรสร้างคอลเลกชันจริง

คิวรีแบบเลื่อนเวลาจะทำงานทุกครั้งที่คุณวนอ่านสมาชิก

  • สร้างคอลเลกชันจริง เพื่อเก็บสำเนาสถานะ
  • หลีกเลี่ยงการเรียกใช้คิวรีที่มีต้นทุนสูงซ้ำหลายครั้ง
  • เลือกใช้ List, Array หรือ Dictionary ให้เหมาะกับงาน

ToList / ToArray

ToList/ToArray จะเรียกใช้คิวรีหนึ่งครั้งและจัดเก็บผลลัพธ์ไว้ การเปลี่ยนแปลงแหล่งข้อมูลในภายหลังจะไม่ปรากฏในผลลัพธ์

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
  }
}

พื้นฐาน ToDictionary

ToDictionary จะสร้างคอลเลกชันจริงเป็น Dictionary<K,V> คีย์ต้อง ไม่ซ้ำกัน มิฉะนั้นจะเกิดข้อผิดพลาด

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
  }
}

รายการซ้ำ: ToLookup/GroupBy

เมื่อคีย์สามารถซ้ำกันได้ ควรใช้ ToLookup (พจนานุกรมที่เก็บหลายค่า) หรือ GroupBy แทน 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);
    }
  }
}

หลีกเลี่ยงการวนอ่านสมาชิกหลายครั้ง

การวนอ่านสมาชิกแต่ละครั้งอาจทำให้ต้องประมวลผลซ้ำ หากคุณจะวนอ่านหลายครั้ง ให้สร้างคอลเลกชันจริงเพียงครั้งเดียว (เช่น ToList)

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
  }
}

รายการตรวจสอบการสร้างคอลเลกชันจริง

รายการตรวจสอบ:

  • ใช้ ToList/ToArray เพื่อเก็บสำเนาสถานะ
  • ใช้ ToDictionary เมื่อคีย์ไม่ซ้ำกัน มิฉะนั้นให้ใช้ ToLookup/GroupBy
  • หลีกเลี่ยงการวนอ่านแหล่งข้อมูลที่มีต้นทุนสูง หลายครั้ง และเก็บสำเนาไว้เพียงครั้งเดียว
  • สร้างคอลเลกชันจริงใกล้จุดเปลี่ยนขอบเขต (การรับส่งข้อมูลเข้าออก หรือการเรียกฐานข้อมูล) เพื่อให้พฤติกรรมคาดเดาได้

ข้อกำหนดของ ToDictionary

ตรวจสอบสั้น ๆ: เมื่อใช้ ToDictionary(keySelector) กับลำดับข้อมูล คีย์ต้องมีคุณสมบัติอย่างไร

สรุป

สรุป: สร้างคอลเลกชันจริงด้วย ToList/ToArray เพื่อเก็บสำเนาสถานะ ใช้ ToDictionary เพื่อค้นหาได้รวดเร็ว (คีย์ต้องไม่ซ้ำกัน) และเก็บสำเนาไว้เพื่อหลีกเลี่ยงการเรียกใช้คิวรีที่มีต้นทุนสูงซ้ำ

คำถามที่พบบ่อย

บทเรียน “การสร้างคอลเลกชัน (ToList, ToDictionary) และข้อควรรู้ด้านประสิทธิภาพ” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การสร้างคอลเลกชัน (ToList, ToDictionary) และข้อควรรู้ด้านประสิทธิภาพ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C# Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C# Academy มีบทเรียนทั้งหมด 3 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การสร้างคอลเลกชัน (ToList, ToDictionary) และข้อควรรู้ด้านประสิทธิภาพ”

แปลงคิวรีที่ทำงานแบบเลื่อนเวลาให้เป็นคอลเลกชันจริงด้วย ToList/ToArray/ToDictionary หลีกเลี่ยงการวนซ้ำหลายครั้ง และทำความเข้าใจกฎเรื่องคีย์ที่ไม่ซ้ำกัน คุณปฏิบัติ C# Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C# Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C# Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 3 บทเรียน

บทเรียน “การสร้างคอลเลกชัน (ToList, ToDictionary) และข้อควรรู้ด้านประสิทธิภาพ” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C# Academy นี้ได้ไหม

ได้ บทเรียน C# Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. GroupBy, Join, Aggregate และการฉายผล (ชนิดนิรนาม)
  2. การสร้างคอลเลกชัน (ToList, ToDictionary) และข้อควรรู้ด้านประสิทธิภาพ
  3. เคล็ดลับการประกอบใช้งาน
← กลับไปที่ C# Academy