Mencantumkan dan menggoreng pola

Tip

Artikel ini adalah bagian dari bagian Dasar-Dasar untuk pengembang yang sudah mengetahui setidaknya satu bahasa pemrograman dan mempelajari C#. Mulailah dengan gambaran umum pencocokan pola jika pola baru bagi Anda. Untuk aturan lengkap tentang jenis yang didukung dan bahasa, lihat pola daftar dalam referensi bahasa.

Bentuk suatu urutan adalah kumpulan sifat yang dapat diamati yang diperlukan oleh suatu pola. Properti ini dapat mencakup jumlah elemen, persyaratan yang ditulis untuk setiap elemen atau untuk urutan elemen secara keseluruhan, dan nilai penanda pada indeks tertentu. Misalnya, bentuk mungkin memerlukan tepat dua elemen dengan "Name" pada indeks 0, atau mungkin memerlukan penanda pertama, penanda terakhir, dan sekuens yang tidak kosong di antara keduanya.

Pola daftar mendeskripsikan suatu bentuk dengan menggabungkan syarat jumlah elemen dengan pola bertingkat pada posisi berurutan. Ini hanya menguji persyaratan yang dituliskan dalam pola: subpola elemen menguji elemen yang bersesuaian, sedangkan pola irisan dapat mengizinkan atau menguji urutan elemen lain yang tidak tercocokkan. Anda dapat menggunakan bagian-bagian ini untuk mencocokkan jumlah yang tepat dan nilai penanda, menangkap nilai pada posisi tetap, mengizinkan bagian tengah yang tidak cocok, atau menerapkan pola bertingkat pada bagian tengah tersebut.

Pilih pola daftar ketika tipe input pada waktu kompilasi memiliki properti Length atau Count, serta akses elemen berindeks yang mengambil elemen berdasarkan posisinya, seperti dalam input[index]. Array, List<T>, string, dan rentang adalah contoh umum. Kompilator menentukan apakah suatu variabel memenuhi syarat berdasarkan tipe waktu kompilasi variabel yang dideklarasikan, karena kompilator harus menentukan anggota wajib ini sebelum program dijalankan. Antarmuka IEnumerable<T> itu sendiri menyediakan enumerasi, bukan anggota-anggota tersebut, bahkan saat objek runtime merupakan koleksi yang dapat diindeks.

Pola daftar menggunakan panjang atau hitungan dan akses elemen terindeks alih-alih enumerasi. Untuk tipe bawaan yang umum, pencocokan pola dapat memeriksa hanya posisi yang disebutkan dalam pola alih-alih mengiterasi setiap elemen. Biaya operasi tersebut tergantung pada jenis input. Melakukan iterasi pada koleksi yang panjang dapat memakan waktu, jadi gunakan perulangan atau LINQ jika penentuan mengharuskan pemeriksaan sejumlah elemen yang tidak tentu, bukan posisi tertentu.

Mencocokkan bentuk yang tepat

Metode berikut mengenali header dua kolom:

static bool IsHeader(string[] columns) =>
    columns is ["Name", "Score"];

Ekspresi columns adalah input pola. ["Name", "Score"] berisi dua pola konstanta. Pola daftar eksak menghilangkan pola irisan, mensyaratkan tepat dua elemen, dan menerapkan setiap pola bersarang pada elemen dengan indeks yang sama. Pola ini menjelaskan bentuk dengan jumlah yang tepat dan dua nilai penanda: "Name" pada indeks 0 dan "Score" pada indeks 1. Pola elemen berlapis bersifat opsional: Pola daftar kosong [] mendeskripsikan dan cocok dengan urutan tanpa elemen.

Pilih pola daftar saat bentuk menggabungkan jumlah elemen dengan persyaratan pada posisi yang diurutkan. Jika yang penting hanya jumlah elemennya, pola properti Length atau Count, seperti items is { Count: 0 }, menyatakan maksud tersebut secara lebih langsung.

Gunakan buang untuk mencocokkan nilai elemen apa pun

Metode berikut mengambil pemenang dan peserta yang finis di posisi ketiga dari urutan finis yang berisi tiga nama:

static string GetAnnouncements(List<string> finishingOrder) =>
    finishingOrder switch
    {
        [var winner, _, var thirdPlace] =>
            $"Winner: {winner}; third place: {thirdPlace}",
        _ => "A complete three-runner result isn't available"
    };

Pola var winner dan var thirdPlace masing-masing mendeklarasikan variabel. Ketika pola daftar cocok, C# menetapkan nilai elemen yang cocok pada posisi tersebut ke variabel yang sesuai, sehingga hasilnya dapat menggunakan winner dan thirdPlace. Pola buang _ menerima elemen kedua dan membuang nilainya. Bentuk ini membutuhkan tepat tiga elemen dan memberikan arti spesifik posisi pertama dan ketiga, tetapi tidak memerlukan nilai tertentu pada posisi apa pun.

Pilih bentuk ini jika posisi yang tetap memiliki makna yang konsisten. Gunakan perulangan atau LINQ saat Anda perlu memeriksa jumlah elemen yang arbitrer, mengubah urutan, mencari di seluruhnya, atau melakukan agregasi.

Izinkan elemen yang tersisa dengan pola slice

Dalam contoh yang disederhanakan ini, baris perintah dapat dimulai dengan --verbose dan berisi argumen lain, dan diasumsikan berakhir dengan nama file input. Metode berikut mengenali bentuk dengan nama file di posisi terakhir dan mengambil nilai tersebut:

static string GetInputFile(string[] arguments) =>
    arguments switch
    {
        ["--verbose", .., var fileName] => $"Verbose processing: {fileName}",
        [.., var fileName] => $"Processing: {fileName}",
        [] => "No input file was provided"
    };

Pola slice.. memungkinkan nol atau lebih elemen tersisa di antara pola elemen pertama dan terakhir. Pola daftar dapat berisi paling banyak satu pola ilis. Cabang switch pertama merepresentasikan sebuah bentuk dengan setidaknya dua elemen: penanda "--verbose" pada indeks 0, nama file pada posisi terakhir, dan sejumlah argumen yang tidak cocok di antaranya. Slice mandiri tidak menguji argumen di tengah tersebut. Lengan kedua menerima bentuk yang tidak ada dan menangkap elemen terakhirnya, sementara pola kosong menangani urutan tanpa elemen.

Irisan dapat muncul di awal, tengah, atau akhir pola list. Gunakan saat urutan panjang variabel adalah bagian dari bentuk tetapi hanya posisi di sekitarnya yang membutuhkan pengujian elemen. Gunakan iterasi biasa saat setiap elemen membutuhkan pemrosesan.

Terapkan pola ke slice

Anda dapat menerapkan pola lain ke bagian yang cocok dengan ... Metode berikut menguji apakah array dimulai dengan "BEGIN", berakhir dengan "END", dan memiliki setidaknya satu elemen di antaranya:

static bool HasContent(string[] entries) =>
    entries is ["BEGIN", .. { Length: > 0 }, "END"];

Pola luar pertama-tama memerlukan penanda "BEGIN" pada indeks 0 dan "END" pada indeks terakhir. Pola properti { Length: > 0 } kemudian menambahkan persyaratan untuk urutan yang dicocokkan oleh slice: urutan tersebut harus berisi setidaknya satu elemen. Secara keseluruhan, persyaratan ini menggambarkan keseluruhan bentuknya. Pola tersebut tidak memeriksa nilai elemen di dalam slice.

Gunakan subpola slice hanya jika bagian tengahnya sendiri perlu diuji atau ditangkap. Jika hanya elemen batas yang penting, polos .. lebih sederhana.

Baca juga