Как можно изменить двумерный массив методом с this?
Как можно повернуть эту матрицу не изменяя строку mat.Rotate90DegreesClockwise(); и не добавляя других строк в Main? Метод для поворота матрицы рабочий, но не знаю как вернуть ответ. Матрица не поворачивается за пределами метода Rotate90DegreesClockwise. Прохожу курс по шарпу, и пока не пойму, это юниттест ломаный или я чего-то не понимаю...
static void Main(string[] args)
{
int[,] mat = new int[,] {
{1,2,3},
{4,5,6},
{7,8,9}
};
mat.Rotate90DegreesClockwise();
Console.WriteLine(mat[0,0]);
}
public static void Rotate90DegreesClockwise(this int[,] matrix)
{
if (matrix is null)
{
throw new ArgumentNullException(nameof(matrix));
}
matrix = Rotate(matrix);
Console.WriteLine(matrix[0, 0]);
}
public static int[,] Rotate(int[,] m)
{
int[,] result = new int[m.GetLength(1), m.GetLength(0)];
for (int i = 0; i < m.GetLength(1); i++)
{
for (int j = 0; j < m.GetLength(0); j++)
{
result[i, j] = m[m.GetLength(0) - j - 1, i];
}
}
return result;
}
Ответы (1 шт):
Автор решения: aepot
→ Ссылка
Например так, скопировать значения обратно в исходную матрицу
public static void Rotate90DegreesClockwise(this int[,] matrix)
{
if (matrix is null)
throw new ArgumentNullException(nameof(matrix));
if (matrix.GetLength(0) != matrix.GetLength(1))
throw new ArgumentException("Получена не квадратная матрица", nameof(matrix));
int size = matrix.GetLength(0);
int[,] buffer = new int[size, size];
for (int row = 0; row < size; row++)
{
for (int col = 0; col < size; col++)
{
buffer[row, col] = matrix[size - col - 1, row];
}
}
for (int row = 0; row < size; row++)
{
for (int col = 0; col < size; col++)
{
matrix[row, col] = buffer[row, col];
}
}
}