0Pricing
C# Academy · Pelajaran

Dasar Span/ReadOnlySpan (emulasi C# 6)

Emulasikan Span/ReadOnlySpan dengan ArraySegment : buat tampilan di atas array, potong dengan offset/panjang, dan proses data tanpa menyalinnya.

Dasar Span/ReadOnlySpan (emulasi C# 6) adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 3. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C# Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C# Academy mencakup 3 pelajaran total.

Mengapa irisan penting

Tujuan: Bekerja dengan irisan tanpa alokasi tambahan.

  • Gunakan ArraySegment<T> sebagai tampilan
  • Iris berdasarkan ofset dan jumlah
  • Tulis metode yang menerima ArraySegment<T>
  • Jaga agar operasi tetap sederhana dan aman

Tampilan tanpa penyalinan

ArraySegment<T> adalah tampilan tanpa penyalinan atas sebagian larik. Berikan tampilan ini kepada metode untuk menghindari penyalinan saat mengiris.

using System;

public class Program
{
  static int Sum(ArraySegment<int> seg)
  {
    int acc = 0;
    int end = seg.Offset + seg.Count;
    for (int i = seg.Offset; i < end; i++) acc += seg.Array[i];
    return acc;
  }

  public static void Main(string[] args)
  {
    int[] data = new int[] { 2, 4, 6, 8, 10 };
    ArraySegment<int> middle3 = new ArraySegment<int>(data, 1, 3); // 4,6,8
    Console.WriteLine("Sum = " + Sum(middle3)); // 18
  }
}

Irisan bertingkat

Anda dapat membuat pembantu irisan untuk mengambil subrentang dari segmen yang sudah ada. Tetap tanpa penyalinan.

using System;

public static class Seg
{
  public static ArraySegment<T> Slice<T>(ArraySegment<T> seg, int start, int count)
  {
    if (start < 0 || count < 0 || start + count > seg.Count) throw new ArgumentOutOfRangeException();
    return new ArraySegment<T>(seg.Array, seg.Offset + start, count);
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    string[] words = new string[] { "alpha", "beta", "gamma", "delta", "epsilon" };
    ArraySegment<string> mid = new ArraySegment<string>(words, 1, 3);  // beta, gamma, delta
    ArraySegment<string> inner = Seg.Slice<string>(mid, 1, 1);         // gamma
    Console.WriteLine(inner.Array[inner.Offset]); // gamma
  }
}

Beroperasi langsung melalui tampilan

Beroperasilah berdasarkan ofset/jumlah agar tidak membuat subteks; cara ini menyerupai pemangkasan berbasis ReadOnlySpan.

using System;

public static class SegOps
{
  public static ArraySegment<char> Trim(ArraySegment<char> seg)
  {
    int start = seg.Offset;
    int end = seg.Offset + seg.Count - 1;

    while (start <= end && Char.IsWhiteSpace(seg.Array[start])) start++;
    while (end >= start && Char.IsWhiteSpace(seg.Array[end])) end--;

    int newCount = (end >= start) ? (end - start + 1) : 0;
    return new ArraySegment<char>(seg.Array, start, newCount);
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    char[] buf = "   hello world   ".ToCharArray(); // single allocation for chars
    ArraySegment<char> all = new ArraySegment<char>(buf, 0, buf.Length);
    ArraySegment<char> trimmed = SegOps.Trim(all);

    // Print the trimmed part without new string:
    for (int i = 0; i < trimmed.Count; i++)
      Console.Write(trimmed.Array[trimmed.Offset + i]);
    Console.WriteLine();
  }
}

Materialize sesuai kebutuhan

Terkadang Anda memerlukan salinan nyata. Materialize segmen ke dalam larik baru hanya di batas akhir.

using System;

public static class SegCopy
{
  public static T[] ToArray<T>(ArraySegment<T> seg)
  {
    T[] copy = new T[seg.Count];
    Array.Copy(seg.Array, seg.Offset, copy, 0, seg.Count);
    return copy;
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    int[] data = new int[] { 1, 2, 3, 4, 5, 6 };
    ArraySegment<int> view = new ArraySegment<int>(data, 2, 3); // 3,4,5

    int[] materialized = SegCopy.ToArray<int>(view); // copy only when you must
    Console.WriteLine(string.Join(",", materialized));
  }
}

Kiat & batasan

Kiat:

  • Rancang API agar menerima ArraySegment<T> ketika Anda bekerja dengan larik.
  • Catat ofset dan jumlah.
  • Salin hanya di batas (masukan/keluaran, interoperabilitas).
  • Span modern menawarkan keamanan dan tampilan pada tumpukan; di sini kita menggunakan segmen untuk mempelajari pola pikir pengirisan.

Peniruan irisan dalam C# 6

Pemeriksaan cepat: Tipe C# 6 mana yang paling tepat meniru irisan tanpa penyalinan (tampilan) atas sebagian larik?

Ringkasan

Ringkasan: Gunakan ArraySegment<T> untuk menampilkan subrentang, tulis API yang menerima segmen, beroperasi melalui ofset/jumlah, dan menyalin hanya jika diperlukan.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Dasar Span/ReadOnlySpan (emulasi C# 6)” gratis?

Ya — teks lengkap “Dasar Span/ReadOnlySpan (emulasi C# 6)” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C# Academy, upgrade ke CoddyKit PRO. Kursus C# Academy mencakup 3 pelajaran total.

Apa yang akan aku pelajari di “Dasar Span/ReadOnlySpan (emulasi C# 6)”?

Emulasikan Span/ReadOnlySpan dengan ArraySegment : buat tampilan di atas array, potong dengan offset/panjang, dan proses data tanpa menyalinnya. Kamu berlatih C# Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai C# Academy?

Tidak diperlukan pengalaman sebelumnya. C# Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 3.

Berapa lama pelajaran “Dasar Span/ReadOnlySpan (emulasi C# 6)” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran C# Academy ini?

Ya. Setiap pelajaran C# Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Dasar Span/ReadOnlySpan (emulasi C# 6)
  2. Emulasi Memory/ReadOnlyMemory: jendela tanpa penyalinan
  3. API String-sebagai-Span (emulasi C# 6)
← Kembali ke C# Academy