在C#中删除2D字符串数组的行

我正在制作一个将数据存储在2D数组中的程序。 我希望能够从这个数组中删除行。 我无法弄清楚为什么这段代码不起作用:

for (int n = index; n < a.GetUpperBound(1); ++n) { for (int i = 0; i < a.GetUpperBound(0); ++i) { a[i, n] = a[i, n + 1]; } } 

有人可以帮帮我吗? 我希望它删除一行并将其下面的所有行拖放到一个地方。 谢谢!

如果要删除项目,则需要创建新数组

尝试这样的事情

 var arrayUpdated = new string[a.GetUpperBound(1)][a.GetUpperBound(0)-1]; for (int n = index; n < a.GetUpperBound(1); n++) { for (int i = 0; i < a.GetUpperBound(0); i++) { arrayUpdated [i, n] = a[i, 1]; } } 

这里的嵌套for循环方法效果很好: https : //stackoverflow.com/a/8000574

这是一个将上面的[,]数组方法的外部循环转换为使用linq的方法。 如果您在遍历期间还使用linq执行其他操作,则仅建议使用linq。

  public T[,] RemoveRow(T[,] array2d, int rowToRemove) { var resultAsList = Enumerable .Range(0, array2d.GetLength(0)) // select all the rows available .Where(i => i != rowToRemove) // except for the one we don't want .Select(i => // select the results as a string[] { T[] row = new T[array2d.GetLength(1)]; for (int column = 0; column < array2d.GetLength(1); column++) { row[column] = array2d[i, column]; } return row; }).ToList(); // convert List to string[,]. return CreateRectangularArray(resultAsList); // CreateRectangularArray() can be copied from https://stackoverflow.com/a/9775057 } 

使用Enumerable.Range迭代所有行,如https://stackoverflow.com/a/18673845所示

不应该++我是i ++? ++ i在执行矩阵运算之前递增(即预增量)