【问题标题】:Delete row of 2D string array in C#在C#中删除二维字符串数组的行
【发布时间】:2011-07-19 13:50:31
【问题描述】:

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

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];
     }
}

有人可以帮我吗?我希望它删除一行并将其下方的所有行随机排列到一个位置。谢谢!

【问题讨论】:

  • 您可以使用List&lt;string[]&gt;。然后,这将为您提供 RemoveRemoveAt 方法,并为您管理差距。

标签: c# arrays string delete-row


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    如果你想删除一个项目,你需要创建一个新数组

    试试这样的

    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];
         }
    }
    

    【讨论】:

      【解决方案3】:

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

      这里有一个方法,将上面[,]数组方法的外循环转换为使用linq。仅当您在遍历期间还使用 linq 执行其他操作时,才建议在此处使用 linq。

          public T[,] RemoveRow<T>(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<string[]> to string[,].
              return CreateRectangularArray(resultAsList); // CreateRectangularArray() can be copied from https://stackoverflow.com/a/9775057
          }
      

      使用 Enumerable.Range 迭代所有行,如 https://stackoverflow.com/a/18673845 中所做的那样

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-04
        • 1970-01-01
        • 2021-08-16
        • 2014-08-10
        • 2021-03-28
        相关资源
        最近更新 更多