Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Kelas Span2D<T> mencerminkan fungsi dari jenis Span<T>, tetapi mendukung area memori 2D. Seperti Memory2D<T>, ini sangat fleksibel dan dapat membungkus berbagai objek yang berbeda, serta pointer asli atau referensi GC.
Tata letak internal mirip dengan tata letak yang digunakan oleh jenis Memory2D<T>. Ini termasuk parameter pitch yang memungkinkan dukungan untuk buffer memori yang tidak bersebelahan. Anda dapat membaca lebih lanjut tentang ini di Memory2D<T> dokumen.
API Platform:
Span2D<T>,Memory2D<T>,ReadOnlySpan2D<T>
Sintaks
Berikut adalah cara untuk membuat instans Span2D<T> dari array 2D:
int[,] array =
{
{ 1, 2, 3 },
{ 4, 5, 6 }
};
Span2D<int> span = array;
// The memory directly maps the 2*3 array here
span[0, 0] = 10;
span[1, 1] = 20;
// The array is now:
// { 10, 2, 3 },
// { 4, 20, 6 }
// We can also use indices, on supported runtimes
int x = span[0, ^1];
// We can also get references to items, like with arrays
ref int reference = ref span[1, 1];
Span2D<int> slice = span.Slice(0, 1, 2, 2);
// Or alternatively, on supported runtimes
slice = span[.., 1..];
int[,] copy = slice.ToArray();
// The resulting array is:
// { 2, 3 },
// { 20, 6 }
Anda juga dapat langsung membuat tampilan 2D melalui memori asli:
int* p = stackalloc int[9];
Span2D<int> span = new Span2D<int>(p, 3, 3);
Jenis ini Span2D<T> mencakup jenis enumerator kustom untuk dengan mudah melintasi baris, kolom, atau seluruh area memori dengan menggunakan sintaks standar foreach dalam C#. Ini juga mendukung melakukan operasi massal dalam satu panggilan:
int[,] array =
{
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 }
};
Span2D<int> span = array;
foreach (int i in span.GetColumn(1))
{
// 2, 5, 8
}
// We can also iterate by reference
foreach (ref int i in span.GetRow(2))
{
// 7, 8, 9
}
foreach (int i in span)
{
// 1, 2, 3, 4, 5...
}
// Set all items in a column to 0
span.GetColumn(0).Clear();
// Set the value of all items in a row
span.GetRow(1).Fill(42);
Span<int> copy = stackalloc int[3];
// Copy all items from a column
span.GetColumn(2).CopyTo(copy);
// Get a copy of a row as an array
int[] array = span.GetRow(1).ToArray();
ReadOnlySpan2D<T>
Jenis ReadOnlySpan2D<T> adalah untuk jenis Span2D<T> seperti ReadOnlySpan<T> untuk Span<T>. Ini mengekspos sekumpulan API yang sama tetapi tidak menyediakan cara untuk langsung memodifikasi konten area memori yang mendasar.
Contoh kode
Anda dapat menemukan lebih banyak contoh dalam pengujian unit.
.NET Community Toolkit