假设我有这个二维数组,我们称之为矩阵。
float[,] arr = { {0, 2, 7 },
{3, 1, 0 },
{6, 2, 4 } };
我必须创建一个函数,你给两个整数i和j,它将返回一个矩阵,没有i行和j列。例如,如果我传递(0,0)作为参数,我将得到
float [,] newArr = {{1, 0 },
{2, 4 } }
因为0行和0列被删除了。
我自己能够想到的解决方案是这个函数,它的工作原理很好,也能完成它应该做的事情,但我想要一个更小更紧凑的解决方案,这样更合理。
public Matrix subMatrix(int _i, int _j)
{
Matrix result = new Matrix(_rows - 1, _cols - 1);
try
{
if (isSquare())
{
List<float> listMatrix = new List<float>();
for (int i = 0; i < _rows; i++)
for (int j = 0; j < _cols; j++)
{
if (i != _i && j != _j)
{
listMatrix.Add(matrix[i, j]);
}
}
int x = -1;
int y = 0;
int z = 0;
foreach (var item in listMatrix)
{
if (y % (result._rows) == 0)
{
x++;
y = 0;
}
result.matrix[x, y] = item;
y++;
}
}
}
catch (IndexOutOfRangeException e)
{
throw e;
}
catch (ArgumentOutOfRangeException e)
{
throw e;
}
return result;
}
另外Matrix是我做的一个类,它基本上是一个2D数组
下面是一些不同方法的简短示例。
class Program
{
static void Main(string[] args)
{
float[,] arr = { {0, 2, 7 },
{3, 1, 0 },
{6, 2, 4 } };
int x = 0;
int y = 0;
float[,] arr2 = SubMatrix(arr, x, y);
for (int i = 0; i < arr2.GetLength(0); i++)
{
for (int j = 0; j < arr2.GetLength(1); j++)
{
Console.Write(arr2[i, j] + " ");
}
Console.WriteLine();
}
Console.ReadKey();
}
private static float[,] SubMatrix(float[,] matrix, int x, int y)
{
float[,] result = new float[matrix.GetLength(0) - 1, matrix.GetLength(1) - 1];
for (int i = 0; i < result.GetLength(0); i++)
{
for (int j = 0; j < result.GetLength(1); j++)
{
result[i, j] = matrix[i >= x ? i + 1 : i, j >= y ? j + 1 : j];
}
}
return result;
}
}
輸出
1 0
2 4