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.
Span2D<T> adalah jenis yang mencerminkan fungsionalitas jenisSpan<T>, tetapi mendukung wilayah memori 2D. Sama seperti Memory2D<T>, ini sangat fleksibel dan dapat membungkus sejumlah objek yang berbeda, serta pointer asli atau referensi GC.
Tata letak internal mirip dengan yang digunakan oleh Memory2D<T> jenis , termasuk parameter nada yang digunakan untuk mengaktifkan dukungan untuk buffer memori yang tidak disinggung. Anda dapat membaca info lebih lanjut tentang ini di Memory2D<T> dokumen.
API Platform:
Span2D<T>,Memory2D<T>,ReadOnlySpan2D<T>
Sintaks
Berikut cara membuat Span2D<T> instans 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 }
Kita 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> juga mencakup jenis enumerator kustom untuk dengan mudah melintasi baris tertentu, kolom, atau seluruh area memori menggunakan sintaks standar foreach dalam C#, serta 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>
adalah ReadOnlySpan2D<T> untuk Span2D<T> jenis apa yang ReadOnlySpan<T> harus Span<T>. Ini mengekspos sekumpulan API yang sama tetapi tidak menyediakan cara untuk langsung memodifikasi konten area memori yang mendasar.
Kode Sampel
Anda dapat menemukan lebih banyak contoh dalam pengujian unit.
.NET Community Toolkit