รูปแบบรายการและทูเพิล
แยกโครงสร้างคอลเลกชัน
รูปแบบรายการและทูเพิล เป็นบทเรียน C# Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C# Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน
รูปแบบทูเพิล
รูปแบบทูเพิล ใช้จับคู่ค่าหลายค่าพร้อมกันด้วยการครอบค่าด้วยวงเล็บ แต่ละตำแหน่งจะจับคู่ด้วยรูปแบบย่อยของตัวเอง
รูปแบบนี้เหมาะอย่างยิ่งสำหรับการตัดสินใจที่ขึ้นอยู่กับข้อมูลนำเข้าหลายค่า เช่น เครื่องจักรสถานะขนาดเล็กหรือโปรแกรมตัดสินเกมเป่ายิ้งฉุบ โดยรวมทุกอย่างไว้ในสวิตช์เดียว
int x = 0, y = 5;
string quadrant = (x, y) switch
{
(0, 0) => "origin",
(0, _) => "y-axis",
(_, 0) => "x-axis",
_ => "plane"
};
System.Console.WriteLine(quadrant);สวิตช์ทูเพิลที่เรียกใช้งานได้
รูปแบบทูเพิลช่วยให้ตารางการตัดสินใจอ่านเข้าใจง่ายขึ้น ในที่นี้ค่าบูลีนสองค่าจะเลือกการกระทำ
แต่ละแขนงจะแสดงรูปแบบทูเพิล และเครื่องหมายทิ้งค่า _ ในตำแหน่งใดหมายความว่าตำแหน่งนั้นเป็นค่าใดก็ได้ แขนงสุดท้ายที่ใช้ _ จะครอบคลุมกรณีที่เหลือ
using System;
class Program {
static string Move(bool fwd, bool turn) => (fwd, turn) switch {
(true, false) => "straight",
(true, true) => "curve",
(false, true) => "spin",
_ => "stop"
};
static void Main() => Console.WriteLine(Move(true, true));
}การผูกค่าภายในทูเพิล
ตำแหน่งต่าง ๆ ในรูปแบบทูเพิลสามารถเก็บค่าไว้ได้ (0, var y) จะจับคู่เมื่อสมาชิกตัวแรกเป็น 0 และผูกสมาชิกตัวที่สองไว้กับ y
จากนั้นคุณสามารถใช้ตัวแปรที่ผูกไว้ในผลลัพธ์ของแขนงหรือในเงื่อนไขกำกับด้วย when ซึ่งเป็นการจับคู่และดึงค่าออกมาได้ในขั้นตอนเดียว
var point = (0, 7);
string r = point switch
{
(0, var y) => $"on y-axis at {y}",
(var x, 0) => $"on x-axis at {x}",
_ => "elsewhere"
};
System.Console.WriteLine(r);รูปแบบรายการ
รูปแบบรายการ ใช้จับคู่อาร์เรย์และรายการจากสมาชิก โดยเขียนด้วยวงเล็บเหลี่ยม เช่น [1, 2, 3] รูปแบบนี้จะจับคู่เมื่อความยาวและรูปแบบของสมาชิกแต่ละตัวตรงกัน
รูปแบบรายการเริ่มมีใน C# 11 และช่วยให้คุณแยกการทำงานตามโครงสร้างของลำดับได้โดยตรง โดยไม่ต้องตรวจสอบความยาวและดัชนีด้วยตนเอง
int[] data = { 1, 2, 3 };
string shape = data switch
{
[] => "empty",
[_] => "one",
[_, _] => "two",
_ => "many"
};
System.Console.WriteLine(shape);การจับคู่สมาชิกแบบตรงทุกค่า
รูปแบบรายการสามารถจับคู่ค่าเฉพาะในแต่ละตำแหน่งได้ [1, 2, 3] จะจับคู่เฉพาะลำดับที่มีสมาชิกสามตัวและตรงกันทุกค่าเท่านั้น
คุณสามารถผสมค่าคงที่กับเครื่องหมายทิ้งค่าได้อย่างอิสระ เช่น [1, _, 3] จะจับคู่รายการที่มีสมาชิกสามตัว เริ่มต้นด้วย 1 และลงท้ายด้วย 3 โดยไม่สนใจค่าตรงกลาง
using System;
class Program {
static void Main() {
int[] a = { 1, 9, 3 };
bool ok = a is [1, _, 3];
Console.WriteLine(ok);
}
}รูปแบบสไลซ์
รูปแบบสไลซ์ .. ใช้จับคู่สมาชิกจำนวนเท่าใดก็ได้ รวมถึงไม่มีสมาชิกเลย ในตำแหน่งเดียว รูปแบบรายการหนึ่งรูปแบบจะมีสไลซ์ได้มากที่สุดหนึ่งตำแหน่ง
[1, .., 9] จะจับคู่รายการใด ๆ ที่เริ่มต้นด้วย 1 และลงท้ายด้วย 9 ไม่ว่าระหว่างนั้นจะมีอะไรอยู่ก็ตาม เหมาะอย่างยิ่งสำหรับการตรวจสอบ head และ tail
int[] nums = { 1, 4, 5, 9 };
string r = nums switch
{
[1, .., 9] => "1..9 bookends",
_ => "other"
};
System.Console.WriteLine(r);การจับสไลซ์เก็บไว้
คุณสามารถใช้ var เพื่อเก็บสมาชิกที่ถูกข้ามไว้ในตัวแปรได้ เช่น [first, .. var rest]
ส่วนที่เก็บไว้จะเป็นอาร์เรย์หรือรายการของชนิดที่จับคู่ได้เอง ทำให้คุณแยกสมาชิก head ออกมาและเก็บ tail ไว้ประมวลผลต่อได้
using System;
class Program {
static void Main() {
int[] xs = { 10, 20, 30, 40 };
if (xs is [var head, .. var tail])
Console.WriteLine($"{head} then {tail.Length} more");
}
}การผูกค่าสมาชิกที่ปลายทั้งสอง
คุณสามารถผูกค่าที่ปลายทั้งสองด้านของสไลซ์ได้ เช่น [var first, .., var last] จะเก็บสมาชิกตัวแรกและตัวสุดท้ายไว้ โดยไม่สนใจส่วนตรงกลาง
วิธีนี้กระชับและเหมาะกับลำดับที่สนใจเฉพาะขอบเขต เช่น การตรวจสอบว่าเส้นทางเริ่มต้นและสิ้นสุดที่จุดที่ทราบแน่ชัด
using System;
class Program {
static void Main() {
string[] route = { "A", "B", "C", "D" };
if (route is [var start, .., var end])
Console.WriteLine($"{start} -> {end}");
}
}รูปแบบรายการที่มีรูปแบบย่อย
แต่ละตำแหน่งในรายการสามารถใช้รูปแบบใดก็ได้ รวมถึงรูปแบบเชิงสัมพันธ์และรูปแบบเชิงตรรกะ [> 0, > 0] จะจับคู่รายการที่มีสมาชิกสองตัวและเป็นค่าบวกทั้งคู่
วิธีนี้นำชุดเครื่องมือรูปแบบทั้งหมดมาประกอบกันเพื่อจับคู่ลำดับ ทำให้คุณตรวจสอบได้ทั้งโครงสร้างและเนื้อหาภายในนิพจน์เดียว
int[] pair = { 3, 8 };
string r = pair switch
{
[> 0, > 0] => "both positive",
[_, _] => "mixed",
_ => "wrong size"
};
System.Console.WriteLine(r);การซ้อนทูเพิลและรายการ
รูปแบบทูเพิลและรูปแบบรายการสามารถซ้อนกันเอง รวมถึงซ้อนอยู่ภายในรูปแบบคุณสมบัติได้ ตำแหน่งหนึ่งในทูเพิลอาจเก็บรูปแบบรายการ และในทางกลับกันก็ได้
วิธีนี้ช่วยให้คุณจับคู่ข้อมูลที่มีโครงสร้างซับซ้อน เช่น ลำดับที่มีป้ายกำกับ ได้ในนิพจน์เดียวแทนการตรวจสอบซ้อนกันหลายครั้ง
using System;
class Program {
static void Main() {
(string, int[]) record = ("primes", new[]{ 2, 3 });
string r = record switch {
("primes", [2, ..]) => "starts with 2",
_ => "other"
};
Console.WriteLine(r);
}
}ข้อกำหนดของรูปแบบรายการ
รูปแบบรายการใช้ได้กับชนิดใดก็ตามที่นับจำนวนได้และเข้าถึงด้วยดัชนีได้ โดยชนิดนั้นต้องมีคุณสมบัติ Length หรือ Count และมีตัวเข้าถึงด้วยดัชนี อาร์เรย์, List<T> และสตริงมีคุณสมบัติตรงตามนี้
การเก็บสไลซ์ยังต้องมีวิธีการสไลซ์หรือตัวเข้าถึงด้วยช่วงด้วย คอลเลกชันสำเร็จรูปส่วนใหญ่รองรับทั้งสองอย่างมาโดยพร้อมใช้งาน
string s = "cat";
bool isCat = s is ['c', 'a', 't'];
System.Console.WriteLine(isCat);ตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความเข้าใจเกี่ยวกับรูปแบบรายการและรูปแบบทูเพิล
ทบทวน
รูปแบบทูเพิลใช้จับคู่ค่าหลายค่าภายในวงเล็บ ส่วนรูปแบบรายการใช้จับคู่โครงสร้างของลำดับภายในวงเล็บเหลี่ยม โดยมี .. เป็นสไลซ์ที่สามารถเก็บส่วนตรงกลางผ่าน var ได้
แต่ละตำแหน่งรับรูปแบบย่อยใดก็ได้และสามารถซ้อนกันได้อย่างอิสระ รูปแบบรายการต้องใช้ชนิดที่นับจำนวนได้และเข้าถึงด้วยดัชนีได้ ตอนนี้คุณมีความเข้าใจชุดเครื่องมือรูปแบบทั้งหมดของ C# แล้ว
คำถามที่พบบ่อย
บทเรียน “รูปแบบรายการและทูเพิล” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “รูปแบบรายการและทูเพิล” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C# Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “รูปแบบรายการและทูเพิล”
แยกโครงสร้างคอลเลกชัน คุณปฏิบัติ C# Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C# Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน C# Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “รูปแบบรายการและทูเพิล” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน C# Academy นี้ได้ไหม
ได้ บทเรียน C# Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- นิพจน์ switch
- รูปแบบชนิดข้อมูลและคุณสมบัติ
- รูปแบบเชิงสัมพันธ์และตรรกะ
- รูปแบบรายการและทูเพิล