如何从C#中的二维数组中删除行和列?
如何从C#中的二维数组中删除特定的行和列 假设我想删除第I行和第I列(跳过它们)。。。对于nXn阵列,不只是3x3,而是将剩余阵列存储在新阵列中。。。 因此,输出将是:如何从C#中的二维数组中删除行和列?,c#,multidimensional-array,delete-row,C#,Multidimensional Array,Delete Row,如何从C#中的二维数组中删除特定的行和列 假设我想删除第I行和第I列(跳过它们)。。。对于nXn阵列,不只是3x3,而是将剩余阵列存储在新阵列中。。。 因此,输出将是: {5,6},{8,9} 不,阵列不允许你这么做。您可以为此创建自己的数据结构,但它不会非常简单(例如,与您只希望能够删除行不同) 对于简单的操作,在底层数组之上构建一个类,并处理重新索引以将虚拟2D数组映射到下面的物理数组就足够了。但是,当您将删除和添加结合起来,并使阵列整体变形时,这将变得有点棘手。没有内置的方法可以做到这一
{5,6},{8,9}
不,阵列不允许你这么做。您可以为此创建自己的数据结构,但它不会非常简单(例如,与您只希望能够删除行不同)
对于简单的操作,在底层数组之上构建一个类,并处理重新索引以将虚拟2D数组映射到下面的物理数组就足够了。但是,当您将删除和添加结合起来,并使阵列整体变形时,这将变得有点棘手。没有内置的方法可以做到这一点,您可以自己做:
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;
}
static void Main()
{
int[,]数组={{1,2,3},{4,5,6},{7,8,9};
var trim=TrimArray(0,2,array);
}
公共静态int[,]TrimArray(int rowToRemove,int columnToRemove,int[,]originalArray)
{
int[,]result=newint[originalArray.GetLength(0)-1,originalArray.GetLength(1)-1];
for(inti=0,j=0;i
非常简单的逻辑。只需玩循环:
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];
}
}
int[,]array={{1,2,3},{4,5,6},{7,8,9};
int[,]arrayskip=newint[array.GetLength(0)-1,array.GetLength(1)-1];
for(int i=1;i
我创建了这个方法,看一看
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;
}
public static double[,]fillNewArr(double[,]originalArr,int row,int col)
{
double[,]tempArray=newdouble[originalArr.GetLength(0)-1,originalArr.GetLength(1)-1];
int newRow=0;
int-newCol=0;
for(int i=0;i
有一些超出范围,这是显而易见的原因,但我正试图达到那里 您的预期输出是什么?可能的重复项无法从数组中“删除”项,它们的大小是固定的。您无法从数组中删除项。但您可以创建一个新的数组,该数组将包含原始数组中的所有项目,但要删除的项目除外。是的,我提到我要将其存储在另一个数组中,而不是同一个数组。有人要求跳过某些项目并将其存储在新数组中。不是真的要求删除一个数组的项。这不像真的删除它只是跳过特定的元素并将剩余的存储在一个新数组中。。。那是it@WT86那么,在这种情况下,一个简单的for循环就可以了。那么你的问题是什么?你的工作在哪里谢谢,但是在你的例子中,如果i-0,我假设会抛出一个异常,因为索引是-1,-1?这样循环就不会继续了,因为长度是0。看看你的条件数组[i,j];在第一次迭代中,您将如何获得数组的[0,0]元素?@WT86您可以很容易地从中提取一个方法,请参见编辑后的答案。您将得到一个IndexOutOfRangeException。是的,您是对的。我将数组长度减少1,然后在未定义的索引中添加所需的元素@brz我修改了它,但仍然超出范围。我必须把newRow++放在一个更好的地方..用我的答案,我把它变成了一个方法。
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;
}