【问题标题】:How to add data from 1d to 2d array in C#如何在 C# 中将数据从一维数组添加到二维数组
【发布时间】:2015-02-16 11:33:10
【问题描述】:

如何将一个数组添加到另一个二维数组?例如

//change this
array2d = { {1,2,3}, {4,5,6} };
//to this
array2d = { {1,2,3}, {4,5,6}, {7,8,9} };
//by adding
array1d = {7,8,9};

除了创建一个比旧数组大的新数组,然后将旧数组复制到数组之外,还有什么更好的方法吗?

【问题讨论】:

  • 你不能调整数组的大小,所以答案是否定的。
  • 你在说什么,你不能调整大小和数组。是的,你可以Array.Resize Example
  • 您可能想尝试使用 List 等通用集合而不是数组。
  • 技术上Array.Resize 分配了一个新数组。它不会调整数组的大小。它用不同大小的新数组替换数组。

标签: c# arrays linq list jagged-arrays


【解决方案1】:

我会推荐 List<List<int>> 来处理这样的事情,除非你有理由不这样做。

它的代码可能如下所示:

List<List<int>> my2dList = new List<List<int>>()
{
    new List<int>()
    {
        1,
        2,
        3
    },
    new List<int>()
    {
        4,
        5,
        6
    },
};
my2dList.Add(new List<int>(){7,8,9});

或者,如果您真的想将每列的长度限制为 3,请考虑使用大小不可变的内部结构(大小为 3 的数组等)

【讨论】:

    【解决方案2】:

    似乎您可能想要使用不同的数据结构,数组列表会使这更容易。

    【讨论】:

      【解决方案3】:

      @VP 发布的代码 sn-p 的扩展版本。包括使用 Linq 从 List(List> 到 Jagged Array 的反向转换:

          // 2d array to List
          List<List<int>> ar2list = new List<List<int>>()
          {
              new List<int>() { 1, 2, 3 },
              new List<int>() { 4, 5, 6 },
          };
      
          // adding item to List
          ar2list.Add(new List<int>() { 7, 8, 9 });
      
          // List to Jagged array conversion using Linq
          int[][] _arrConcat = ar2list.Select(Enumerable.ToArray).ToArray();
      

      最后,根据 OP 的要求,与此特定用例相关,int[][] 可以通过简单的 for 循环轻松转换为 int[,]

      array2d = new int[_arrConcat.Length, 3];
      for (int i = 0; i<_arrConcat.Length; i++)
      {
          for (int j = 0; j < 3; j++)
          {
              array2d[i, j] = _arrConcat[i][j];
          }
      }
      

      其中array2d 是添加了索引/内容的原始数组。

      希望这会有所帮助。最好的问候,

      【讨论】:

        猜你喜欢
        • 2019-07-23
        • 1970-01-01
        • 2018-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-23
        • 1970-01-01
        • 2012-01-01
        相关资源
        最近更新 更多