Изменение длины двумерного массива
Каким образом можно изменить длину заданного двумерного массива double[,] arr?
Учитывая, что для одномерного массива существует метод Array.Resize();
Ответы (1 шт):
Автор решения: Blackmeser
→ Ссылка
using System;
public class Example
{
public static void Main()
{
int[,] arr = new int[10,2]; //создать массив 10x2
for (int n1 = 0; n1 <= arr.GetUpperBound(0); n1++) {
arr[n1, 0] = n1;
arr[n1, 1] = n1 * 2;
}
//конвертировать в массив 12x2
arr = (int[,]) ResizeArray(arr, new int[] { 12, 2} );
for (int ctr = 0; ctr <= arr.GetUpperBound(0); ctr++)
Console.WriteLine("{0}: {1}, {2}", ctr, arr[ctr, 0], arr[ctr, 1]);
Console.WriteLine();
//конвертировать в массив 2x2
arr = (int[,]) ResizeArray(arr, new int[] { 2, 2} );
for (int ctr = 0; ctr <= arr.GetUpperBound(0); ctr++)
Console.WriteLine("{0}: {1}, {2}", ctr, arr[ctr, 0], arr[ctr, 1]);
}
private static Array ResizeArray(Array arr, int[] newSizes)
{
if (newSizes.Length != arr.Rank)
throw new ArgumentException("arr must have the same number of dimensions " +
"as there are elements in newSizes", "newSizes");
var temp = Array.CreateInstance(arr.GetType().GetElementType(), newSizes);
int length = arr.Length <= temp.Length ? arr.Length : temp.Length;
Array.ConstrainedCopy(arr, 0, temp, 0, length);
return temp;
}
}