【问题标题】:(jagged array) Array of an Array: automatically create in while loop, how to initialize?(jagged array) Array of an Array:在while循环中自动创建,如何初始化?
【发布时间】:2015-09-29 16:33:28
【问题描述】:

我想从一个文本文件创建一个数组的数组...

共有 20000 行,每行 21 个字符串,用 ',' 分隔。

我想读取每一行并将其制成一个数组,每一行都是其中的一个新数组。

所以我想通过这样开始创建锯齿状数组:

字符串[][] SqlArray = 新字符串[200000][21];

但它给出:错误消息:无效的排名说明符:预期的','或]

如何创建或初始化这个数组?

我将像这样填充数组中的数据:

当(真) {

            string theline = readIn.ReadLine();
            if (theline == null) break;

            string[] workingArray = theline.Split(',');

            for (int i = 0; i < workingArray.Length; i++)
            {

                for (int k = 0; k < 20; k++)
            {
               SqlArray[i][k] = workingArray[k];

             }


            }
        }

谢谢

【问题讨论】:

    标签: c# arrays


    【解决方案1】:

    这种类型的初始化只适用于 Java。您必须声明一个数组数组,然后在循环中初始化每个数组。

    string[][] SqlArray = new string[21][];
    for(int index = 0; index < SqlArray.Length; index++)
    {
        SqlArray[index] = new string[2000000];
    }
    

    或者,您可以使用非锯齿状数组。它可能会满足您的需求。

    string[,] SqlArray = new string[21 , 2000000];
    

    可以这样访问:

    SqlArray[2,6264] = x;
    

    【讨论】:

      【解决方案2】:

      对于任何感兴趣的人,这就是我最终实现它的方式:

         TextReader readIn = File.OpenText("..\\..\\datafile.txt");
      

      字符串[][] SqlArray = 新字符串[rowNumCreate][];

              int e = 0;
      
              while (true)
              {
      
                  string theline = readIn.ReadLine();
                  if (theline == null) break;
      
                  string[] workingArray = theline.Split(',');
      
                  SqlArray[e] = new string[valuesInRow +1];
      
                  for (int k = 0; k < workingArray.Length; k++)
                  {
      
                      SqlArray[e][k] = workingArray[k];
      
                  }
      
                  e++;
      
              }
      

      正在读取的文件是一个简单的模拟数据库,设置为一个平面文件,它是自动生成的,用于测试我正在实现的算法,该算法适用于锯齿状数组;因此,我没有使用数据库,而是创建了它以方便使用并随意增加和减少大小。

      这是构建文本文件的代码:

      随机技能id;

      skill_id = new Random(); // 整数计数器 =0;

              string seedvalue = TicksToString();
              int rowNumCreate = 200000;
              int valuesInRow = 20;
      
      
              string lineInFile = seedvalue;
              string delimiter = ",";
      
      
              for (int i = 0; i < rowNumCreate; i++)
              {
      
                  for (int t = 0; t < valuesInRow; t++)
                  {
      
                      int skill = skill_id.Next(40);
      
                      string SCon = Convert.ToString(skill);
      
                      lineInFile += delimiter + SCon;
      
                  }
      
                  if (rowNumCreate >= i + 1)
                  {
                      dataFile.WriteLine(lineInFile);
                      lineInFile = "";
      
      
                      string userPK = TicksToString();
                      lineInFile += userPK;
      
                  }
      
              }
      
              dataFile.Close();
      
      
      
          public static string TicksToString()
          {
              long ms = DateTime.Now.Second;
              long ms2 = DateTime.Now.Millisecond;
              Random seeds;
              seeds = new Random();
              int ran = seeds.GetHashCode();
      
              return string.Format("{0:X}{1:X}{2:X}", ms, ms2, ran).ToLower();
          }
      

      我还是个学生,所以不确定代码是否是 A 级,但它可以工作:)

      【讨论】:

        猜你喜欢
        • 2022-12-19
        • 1970-01-01
        • 1970-01-01
        • 2022-12-01
        • 1970-01-01
        • 2021-09-27
        • 2015-10-05
        • 2012-02-10
        • 1970-01-01
        相关资源
        最近更新 更多