Как сделать double[,] a = new double[10, 10]; double[] b = a[5];?

Нужно каким-либо образом интерпретировать строку двумерного массива как одномерный массив, как в примере:

double[,] a = new double[10, 10];
double[] b = a[5];

Понятно, что

double[] b = new double[10];
for (int i = 0; i < 10; i++)
{
    b[i] = a[5, i];
}

решит проблему, но нужно именно без поэлементного копирования.

Узнал в одном источнике про Cast<>, в другом - про ArraySegment. Если объединить - то получится:

double[,] from = new double[,] { { 1, 2 }, { 3, 4 }, { 5, 6 } };
double[] to = from.Cast<double>().ToArray();
double[] part = new ArraySegment<double>(to, 4, 2).ToArray();

for (int i = 0; i < part.Length; i++)
{
    Console.Write($"{part[i]:F} ");
}
Console.WriteLine();

И результат - правильный, 3-я строка массива from, т.е. 5.0 6.0

Но как я понимаю, .ToArray() именно копирует элементы. И мы возвращаемся к

for (int i = 0; i < 10; i++)
{
   b[i] = a[5, i];
}

А мне нужна именно O(1), O(n) - ну совсем не хочется... Есть ли какие еще варианты? Может с unsafe?


Ответы (0 шт):