Span2D<T>
Der Span2D<T>
ist ein Typ, der die Funktionalität des Span<T>
-Typs widerspiegelt, aber er unterstützt 2D-Arbeitsspeicherbereiche. Genau wie Memory2D<T>
ist er extrem flexibel und kann eine Reihe verschiedener Objekte sowie native Zeiger oder GC-Verweise umschließen.
Das interne Layout ähnelt dem vom Memory2D<T>
-Typ verwendeten, einschließlich eines Abstandsparameters, der verwendet wird, um die Unterstützung für nicht zusammenhängende Arbeitsspeicherpuffer zu ermöglichen. Weitere Informationen hierzu finden Sie in der Memory2D<T>
-Dokumentation.
Plattform-APIs:
Span2D<T>
,Memory2D<T>
,ReadOnlySpan2D<T>
Syntax
So können Sie eine Span2D<T>
-Instanz aus einem 2D-Array erstellen:
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[2, 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 }
Wir können auch direkt eine 2D-Ansicht über nativen Speicher erstellen:
int* p = stackalloc int[9];
Span2D<int> span = new Span2D<int>(p, 3, 3);
Der Span2D<T>
-Typ enthält auch benutzerdefinierte Enumerationstypen, um eine bestimmte Zeile, Spalte oder den gesamten Arbeitsspeicherbereich mithilfe der Standardsyntax foreach
in C# zu durchlaufen sowie Massenvorgänge in einem einzelnen Aufruf auszuführen:
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>
Der ReadOnlySpan2D<T>
ist für den Span2D<T>
-Typ, was ReadOnlySpan<T>
für Span<T>
ist. Er macht einen ähnlichen Satz von APIs verfügbar, bietet jedoch keine Möglichkeit, den Inhalt des zugrunde liegenden Arbeitsspeicherbereichs direkt zu ändern.
Beispielcode
Weitere Beispiele finden Sie in den Komponententests.
.NET Community Toolkit