Как сделать 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?