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

องค์ประกอบกระจาย

รวมคอลเลกชันด้วยตัวดำเนินการกระจาย

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

องค์ประกอบแบบกระจาย ..

ภายในนิพจน์คอลเลกชัน องค์ประกอบแบบกระจาย .. จะแทรกเนื้อหาของคอลเลกชันอื่นลงไปโดยตรง นี่คือวิธีรวมลำดับต่าง ๆ ในรูปแบบที่ประกาศเจตนาได้ชัดเจน

using System;

int[] a = [1, 2, 3];
int[] b = [4, 5, 6];
int[] all = [..a, ..b];
Console.WriteLine(string.Join(",", all)); // 1,2,3,4,5,6

การผสมองค์ประกอบแบบกระจายกับองค์ประกอบเดี่ยว

คุณสามารถสลับองค์ประกอบแบบกระจายกับค่าแต่ละค่าได้อย่างอิสระ และลำดับจะยังคงเดิม

using System;

int[] middle = [2, 3, 4];
int[] result = [1, ..middle, 5];
Console.WriteLine(string.Join(",", result)); // 1,2,3,4,5

การเติมด้านหน้าและด้านท้าย

องค์ประกอบแบบกระจายทำให้การ “เติมด้านหน้า” หรือ “เติมด้านท้าย” เป็นเรื่องง่าย โดยจะสร้างคอลเลกชันใหม่แทนการเปลี่ยนแปลงคอลเลกชันเดิม

using System;

int[] core = [10, 20, 30];
int[] withHead = [0, ..core];
int[] withTail = [..core, 40];
Console.WriteLine(string.Join(",", withHead)); // 0,10,20,30
Console.WriteLine(string.Join(",", withTail)); // 10,20,30,40

การกระจายจากหลายแหล่ง

คุณสามารถกระจายคอลเลกชันจำนวนเท่าใดก็ได้ลงในคอลเลกชันเดียว วิธีนี้จะเชื่อมลิสต์หลายรายการเข้าด้วยกันในนิพจน์เดียว

using System;
using System.Collections.Generic;

List<string> x = ["a", "b"];
List<string> y = ["c"];
List<string> z = ["d", "e"];
List<string> merged = [..x, ..y, ..z];
Console.WriteLine(string.Join(",", merged)); // a,b,c,d,e

การกระจายจากคอลเลกชันต่างชนิด

แหล่งที่มากระจายอาจเป็นสิ่งที่แจกแจงได้ทุกชนิด เช่น กระจายอาร์เรย์ลงในลิสต์ หรือกระจายลิสต์ลงในอาร์เรย์ ชนิดเป้าหมายจะเป็นตัวกำหนดผลลัพธ์

using System;
using System.Collections.Generic;

int[] arr = [1, 2];
List<int> list = [3, 4];
int[] combined = [..arr, ..list];
Console.WriteLine(string.Join(",", combined)); // 1,2,3,4

การกระจาย IEnumerable

แม้แต่ลำดับแบบประเมินเมื่อจำเป็นจาก LINQ ก็สามารถกระจายได้ โดยลำดับเหล่านั้นจะถูกแจกแจงเมื่อสร้างคอลเลกชันใหม่

using System;
using System.Linq;

var evens = Enumerable.Range(1, 6).Where(n => n % 2 == 0);
int[] result = [0, ..evens];
Console.WriteLine(string.Join(",", result)); // 0,2,4,6

การประกอบคอลเลกชันขึ้นทีละส่วน

องค์ประกอบแบบกระจายเหมาะสำหรับการสร้างคอลเลกชันทีละส่วนโดยไม่ต้องใช้การเรียก Add แบบคำสั่ง

using System;

int[] baseline = [1, 2, 3];
int[] extra = [4, 5];
int[] full = [..baseline, ..extra, 6];
Console.WriteLine(full.Length); // 6

ลำดับมีความสำคัญ

ลำดับผลลัพธ์จะเป็นไปตามลำดับข้อความขององค์ประกอบและองค์ประกอบแบบกระจาย ดังนั้นการสลับองค์ประกอบแบบกระจายจะเปลี่ยนผลลัพธ์

using System;

int[] a = [1, 2];
int[] b = [3, 4];
Console.WriteLine(string.Join(",", [..a, ..b])); // 1,2,3,4
Console.WriteLine(string.Join(",", [..b, ..a])); // 3,4,1,2

องค์ประกอบแบบกระจายเทียบกับ Concat

องค์ประกอบแบบกระจายมักใช้แทน Concat + ToArray ได้ อ่านได้ชัดเจนกว่า และเปิดโอกาสให้คอมไพเลอร์จัดขนาดผลลัพธ์ได้อย่างมีประสิทธิภาพ

using System;
using System.Linq;

int[] a = [1, 2];
int[] b = [3, 4];
// old
int[] oldWay = a.Concat(b).ToArray();
// new
int[] newWay = [..a, ..b];
Console.WriteLine(oldWay.SequenceEqual(newWay)); // True

การกระจายลงในสแปน

เนื่องจากเป้าหมายสามารถเป็นสแปนได้ คุณจึงรวมข้อมูลเข้าด้วยกันพร้อมอาจใช้การจัดสรรบนสแตกสำหรับส่วนของโปรแกรมที่ต้องการประสิทธิภาพสูง

using System;

ReadOnlySpan<int> head = [1, 2];
ReadOnlySpan<int> tail = [3, 4];
int[] joined = [..head, ..tail];
Console.WriteLine(string.Join(",", joined)); // 1,2,3,4

การรวมข้อมูลในทางปฏิบัติ

ในที่นี้ เรารวมการตั้งค่าเริ่มต้นเข้ากับค่าที่เขียนทับในนิพจน์เดียว โดยคงค่าในภายหลังไว้หลังค่าตั้งต้น

using System;

string[] defaults = ["--verbose", "--color"];
string[] userArgs = ["--output=log.txt"];
string[] finalArgs = [..defaults, ..userArgs];
Console.WriteLine(string.Join(" ", finalArgs));

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ตรวจสอบความเข้าใจเกี่ยวกับองค์ประกอบแบบกระจายของคุณ

สรุปทบทวน

คุณได้เรียนรู้องค์ประกอบแบบกระจาย .. ภายในนิพจน์คอลเลกชัน

  • [..a, ..b] ใช้เชื่อมคอลเลกชันเข้าด้วยกัน
  • องค์ประกอบแบบกระจายสามารถผสมกับองค์ประกอบเดี่ยวและรักษาลำดับเดิมไว้
  • แหล่งที่มาอาจเป็นอาร์เรย์ ลิสต์ สแปน หรือ IEnumerable ใดก็ได้
  • เป็นทางเลือกที่อ่านได้ชัดเจนกว่า Concat().ToArray()

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

บทเรียน “องค์ประกอบกระจาย” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “องค์ประกอบกระจาย”

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

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

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

บทเรียน “องค์ประกอบกระจาย” ใช้เวลานานแค่ไหน

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

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

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

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

  1. ไวยากรณ์นิพจน์คอลเลกชัน
  2. องค์ประกอบกระจาย
  3. การอนุมานชนิดของคอลเลกชันจากเป้าหมาย
  4. ตัวสร้างคอลเลกชัน
← กลับไปที่ C# Academy