Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Le Span2D<T> est un type qui reflète les fonctionnalités du type Span<T>, mais prend en charge les régions de mémoire 2D. Tout comme Memory2D<T>, il est extrêmement flexible et peut envelopper plusieurs objets différents, ainsi que des pointeurs natifs ou des références GC.
La disposition interne est similaire à celle utilisée par le type Memory2D<T>, y compris un paramètre de pas qui est utilisé pour activer la prise en charge des tampons mémoire discontinus. Vous pouvez en savoir plus à ce sujet dans la documentation Memory2D<T>.
API de plateforme :
Span2D<T>,Memory2D<T>,ReadOnlySpan2D<T>
Syntaxe
Voici comment vous pouvez créer une instance Span2D<T> à partir d’un tableau 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 }
Nous pouvons également créer directement une vue 2D sur la mémoire native :
int* p = stackalloc int[9];
Span2D<int> span = new Span2D<int>(p, 3, 3);
Le type Span2D<T> inclut également des types d’énumérateurs personnalisés pour parcourir facilement une ligne, une colonne ou l'ensemble de la zone mémoire donnée en utilisant la syntaxe standard foreach en C#, ainsi que pour effectuer des opérations en bloc dans un seul appel :
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>
ReadOnlySpan2D<T> est au type Span2D<T> ce que ReadOnlySpan<T> est au type Span<T>. Il expose un ensemble similaire d’API, mais ne permet pas de modifier directement le contenu de la zone de mémoire sous-jacente.
Exemple de code
Vous trouverez d’autres exemples dans les tests unitaires.
.NET Community Toolkit