Asas Span/ReadOnlySpan (peniruan C# 6)
Tiru Span/ReadOnlySpan dengan ArraySegment : cipta paparan di atas tatasusunan, potong dengan ofset/panjang, dan proses data tanpa menyalin.
Asas Span/ReadOnlySpan (peniruan C# 6) ialah pelajaran Akademi C# percuma di CoddyKit. Ini ialah pelajaran 1 daripada 3. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Akademi C#, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Akademi C# merangkumi sejumlah 3 pelajaran.
Mengapa hirisan penting
Matlamat: Gunakan hirisan tanpa peruntukan tambahan.
- Gunakan ArraySegment<T> sebagai paparan
- Hiris berdasarkan ofset dan bilangan
- Tulis kaedah yang menerima ArraySegment<T>
- Kekalkan operasi yang mudah dan selamat
Paparan tanpa salinan
ArraySegment<T> ialah paparan tanpa salinan pada sebahagian tatasusunan. Hantarkannya kepada kaedah untuk mengelakkan salinan hirisan.
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
}
}
Hirisan bersarang
Anda boleh membina pembantu Slice untuk mengambil subjulat daripada segmen sedia ada. Ia masih tanpa salinan.
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
}
}
Operasi setempat melalui paparan
Lakukan operasi berdasarkan ofset/bilangan untuk mengelakkan penciptaan subrentetan; pendekatan ini menyerupai pemangkasan berasaskan 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();
}
}
Jelmakan apabila diperlukan
Kadangkala Anda memerlukan salinan sebenar. Materialize segmen ke dalam tatasusunan baharu hanya pada sempadan.
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));
}
}
Petua & had
Petua:
- Reka bentuk API supaya menerima ArraySegment<T> apabila Anda bekerja dengan tatasusunan.
- Jejaki ofset dan bilangan.
- Salin hanya pada sempadan (I/O, kesalingoperasian).
- Span moden menawarkan keselamatan dan paparan pada tindanan; di sini kita menggunakan segmen untuk mempelajari cara berfikir tentang penghirisan.
Meniru hirisan dalam C# 6
Imbas kembali
Imbas kembali: Gunakan ArraySegment<T> untuk melihat subjulat, tulis API yang menerima segmen, lakukan operasi melalui ofset/bilangan, dan salin hanya apabila perlu.
Pelajari C# dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 93
- Pelajaran
- 346
Soalan Lazim
Adakah pelajaran “Asas Span/ReadOnlySpan (peniruan C# 6)” percuma?
Ya — teks penuh “Asas Span/ReadOnlySpan (peniruan C# 6)” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Akademi C#, tingkat taraf kepada CoddyKit PRO. Kursus Akademi C# merangkumi sejumlah 3 pelajaran.
Apakah yang akan saya pelajari dalam “Asas Span/ReadOnlySpan (peniruan C# 6)”?
Tiru Span/ReadOnlySpan dengan ArraySegment : cipta paparan di atas tatasusunan, potong dengan ofset/panjang, dan proses data tanpa menyalin. Anda berlatih Akademi C# menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Akademi C#?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Akademi C# di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 3.
Berapa lamakah pelajaran “Asas Span/ReadOnlySpan (peniruan C# 6)” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Akademi C# ini?
Ya. Setiap pelajaran Akademi C# menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Asas Span/ReadOnlySpan (peniruan C# 6)
- Peniruan Memory/ReadOnlyMemory: tetingkap tanpa salinan
- API String-sebagai-Span (peniruan C# 6)