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

รูปแบบรายการและทูเพิล

แยกโครงสร้างคอลเลกชัน

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

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

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