【问题标题】:Resizing and initializing 2D array C#调整和初始化二维数组 C#
【发布时间】:2016-12-25 10:49:17
【问题描述】:

我有一个string 类型的二维数组,我想在某个循环中对其进行修改和调整大小。我的主要目标是通过创建一个 2d 数组来使用最少的内存,该数组将在每次循环迭代时进行修改,并将 char 添加到该数组中的适当单元格。这是我的代码:

static void Main(string[] args)
    {
        int maxBound = 100;//length of freq array
        Random rnd1 = new Random();
        int numLoops = rnd1.Next(1000, 1200);//number of total elements in freq array
        int[] freq = new int[maxBound];//freq array
        string[,] _2dim = new string[maxBound, numLoops];//rows,columns
        Random rnd2 = new Random();

        for (int i = 0; i < numLoops; i++)
        {
            int s = rnd2.Next(maxBound);
            freq[s]++;
            //Here I try to add `*` to the _2dim array while resizing it to the appropriate size

        }
    } 

解决方案的主要方法是什么?谢谢

【问题讨论】:

  • 1.无法调整数组大小 2. 使用两个 for 循环遍历所有元素
  • 我可以使用 List of Lists 之类的东西吗?
  • 是的,我认为这是你应该使用的方法

标签: c# arrays multidimensional-array


【解决方案1】:

您可能想要使用锯齿状数组,而不是二维数组。简而言之,2D 数组始终是 N x M 矩阵,您无法调整其大小,而锯齿状数组是数组的数组,您可以在其中分别以不同的大小初始化每个内部元素(请参阅细节差异here

int maxBound = 100;
Random rnd = new Random();
int numLoops = rnd.Next(1000, 1200);

string[][] jagged = new string[numLoops][];

for (int i = 0; i < numLoops; i++)
{
    int currLen = rnd.Next(maxBound);
    jagged[i] = new string[currLen];

    for (int j = 0; j < currLen; j++)
        jagged[i][j] = "*"; // do some initialization
}

【讨论】:

    【解决方案2】:

    您应该使用嵌套在列表中的string 类型的列表。然后您可以修改此列表。为了迭代这个,你应该使用两个 for 循环。

    List<List<string>> l = new List<List<string>> { new List<string> { "a", "b" }, new List<string> { "1", "2" } };
    

    迭代示例:

    for(int i = 0; i < l.Count; i++)
            {
                for(int j = 0; j < l[i].Count; j++)
                {
                    Console.WriteLine(l[i][j]);
                }
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-29
      • 2020-10-14
      • 1970-01-01
      • 2020-03-30
      相关资源
      最近更新 更多