Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
La Span2D<T> classe esegue il mirroring delle funzionalità del Span<T> tipo, ma supporta le aree di memoria 2D. Come Memory2D<T>, è estremamente flessibile e può eseguire il wrapping di diversi oggetti, nonché puntatori nativi o riferimenti GC.
Il layout interno è simile al layout usato dal Memory2D<T> tipo . Include un parametro di pitch che consente il supporto per buffer di memoria discontinui. Per altre informazioni, vedere la Memory2D<T> documentazione.
API della piattaforma:
Span2D<T>,Memory2D<T>,ReadOnlySpan2D<T>
Sintassi
Ecco come creare un'istanza Span2D<T> da una matrice 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 }
È anche possibile creare direttamente una visualizzazione 2D sulla memoria nativa:
int* p = stackalloc int[9];
Span2D<int> span = new Span2D<int>(p, 3, 3);
Il Span2D<T> tipo include tipi di enumeratore personalizzati per attraversare facilmente una determinata riga, colonna o l'intera area di memoria usando la sintassi standard foreach in C#. Supporta anche l'esecuzione di operazioni bulk in una singola chiamata:
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>
Il tipo ReadOnlySpan2D<T> è al tipo Span2D<T> come ReadOnlySpan<T> è a Span<T>. Espone un set simile di API, ma non consente di modificare direttamente il contenuto dell'area di memoria sottostante.
Esempio di codice
Altri esempi sono disponibili negli unit test.
.NET Community Toolkit