Итак, у вас есть массив с числами и вы хотите иметь отдельные ссылки на сегмент этого массива.Но Span - это особый тип значений, который нельзя обойти.Таким образом, вы должны хранить информацию, чтобы генерировать эти отдельные промежутки только тогда, когда это необходимо ...
// Here we store index and length for each desired segment
var mySegments = new (int position, int length)[] { (17, 5), (48, 19), (79, 16) };
Затем, когда необходимо получить доступ ...
double [100] Numbers = GetNumbersFromSomwhere();
public double[] GetSegment(int segmentIndex)
{
var segment = mySegments[segmentIndex];
var reference = new Span<double>(Numbers, segment.position, segment.length);
return reference.ToArray();
}
Однако, этот финалToArray () создаст экземпляр нового массива объектов (который генерирует GC-давление).Поэтому, возможно, вы могли бы хранить и обращаться к своим данным в виде байтового массива (очевидно, учитывая 8 байтов длины каждого двойного числа), чтобы генерировать отдельные отрезки двойного числа.И позже, наконец, получите ваши значения с помощью функции, подобной этой, для чтения конкретного двойного числа:
// Converts a Span into a double
// Requires using System.Runtime.CompilerServices.Unsafe
public static double ToDouble(ReadOnlySpan<byte> value)
{
if (value.Length < sizeof(double))
throw new ArgumentOutOfRangeException(nameof(value));
return Unsafe.ReadUnaligned<double>(ref MemoryMarshal.GetReference(value));
}
Надеюсь, это поможет в вашем случае Vector (фиксированный тип, я нажимаю).