如何从C#中的2D数组中删除特定的行和列?
int[,] array= {{1,2,3},{4,5,6},{7,8,9}};
假设我要删除第i列和第i列(跳过它们)...对于nXn数组而不仅仅是3x3并将剩余的数组存储在新数组中... 所以输出将是:
{5,6},{8,9}
答案 0 :(得分:5)
没有内置的方法可以做到这一点,你可以自己做:
static void Main()
{
int[,] array = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
var trim = TrimArray(0, 2, array);
}
public static int[,] TrimArray(int rowToRemove, int columnToRemove, int[,] originalArray)
{
int[,] result = new int[originalArray.GetLength(0) - 1, originalArray.GetLength(1) - 1];
for (int i = 0, j = 0; i < originalArray.GetLength(0); i++)
{
if (i == rowToRemove)
continue;
for (int k = 0, u = 0; k < originalArray.GetLength(1); k++)
{
if (k == columnToRemove)
continue;
result[j, u] = originalArray[i, k];
u++;
}
j++;
}
return result;
}
答案 1 :(得分:1)
不,数组不允许你这样做。您可以为此创建自己的数据结构,但它不会非常简单(例如,如果您只想删除行,则不同)。
对于简单的操作,在底层数组之上构建一个类就足够了,并处理重新索引以将虚拟2D数组映射到下面的物理数组。但是,当你将删除和添加结合起来并使整个阵列变形时,它会变得有点棘手。
答案 2 :(得分:1)
非常简单的逻辑。只需玩循环:
int[,] array = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
int[,] arrayskip = new int[array.GetLength(0) - 1, array.GetLength(1) - 1];
for (int i = 1; i < array.GetLength(0); i++)
{
for (int j = 1; j < array.GetLength(1); j++)
{
arrayskip[i - 1, j - 1] = array[i, j];
}
}
答案 3 :(得分:0)
我创建了这个方法,看看
public static double[,] fillNewArr(double[,] originalArr, int row, int col)
{
double[,] tempArray = new double[originalArr.GetLength(0) - 1, originalArr.GetLength(1) - 1];
int newRow = 0;
int newCol = 0;
for (int i = 0; i < originalArr.GetLength(0); i++)
{
for (int j = 0; j < originalArr.GetLength(1); j++)
{
if(i != row && j != col)
{
tempArray[newRow, newCol] = originalArr[i, j];
newRow++;
newCol++;
}
}
}
return tempArray;
}
有一些超出范围,这显然是为什么但我试图到达那里......