องค์ประกอบกระจาย
รวมคอลเลกชันด้วยตัวดำเนินการกระจาย
องค์ประกอบกระจาย เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ