【问题标题】:Trying to vonvert 2d array into 1d array,can somebody help me试图将二维数组转换为一维数组,有人可以帮我吗
【发布时间】:2018-12-14 20:20:54
【问题描述】:

有人可以帮我将二维数组转换为一维数组吗? 2d 数组随机编译。我也是 C# 新手,是的,我很抱歉我的英语) 谢谢!

 Random rnd = new Random();
        int[,] lala = new int[5, 6];
        for (int i = 0; i < 5; i++)
        {
            for (int j = 0; j < 6; j++)
            {
                lala[i, j] = rnd.Next(1, 10);
                Console.Write(lala[i, j] + " ");
            }
            Console.WriteLine();

        }
        Console.ReadKey();
        int i, j;
        int[] b = new int[30];
        int k = 0;
        for (i = 0; i < 5; i++)
        {
            for (j = 0; j < 6; j++)
            {
                b[k++] = lala[i, j];
            }
        }

        for (i = 0; i < 5 * 6; i++)
        {
            Console.WriteLine(b[i] + " ");
        }
        Console.ReadKey();

【问题讨论】:

  • 为什么在第二个循环中使用 2 作为循环限制?它们也应该是 5 和 6。
  • 好的,你已经编辑过了。现在你应该得到一些关于ij 的错误。我会摆脱 int i, j; 并更改所有 for 循环以每次声明它们:for (int i....for (int j...
  • @JohnnyMopp 抱歉,我不明白我到底需要改变什么,你不能给我发个代码吗?
  • @JohnnyMopp 你能帮我将最终的一维数组转换回二维数组吗?
  • 您可以使用与lala[i, j] = b[i * 6 + j];相同的嵌套循环

标签: c# arrays multidimensional-array


【解决方案1】:

如果您只是想以某种方式将 2D 数组的值放入 1D - 这是一种方法

int upper1 = 5;
int upper2 = 6;
int[,] twoD = new int[upper1, upper2];
// fill array

int[] oneD = new int[upper1 * upper2];
int idx = -1;
for (int i = 0; i < upper1; i++)
{
    for (int j = 0; j < upper2; j++)
    {
        oneD[++idx] = twoD[i,j]; 
    }
}

【讨论】:

    【解决方案2】:
            Random rnd = new Random();
            int[,] lala = new int[5, 6];
            for (int i = 0; i < 5; i++)
            {
                for (int j = 0; j < 6; j++)
                {
                    lala[i, j] = rnd.Next(1, 10);
                    Console.Write(lala[i, j] + " ");
                }
                Console.WriteLine();
            }
            Console.ReadKey();
            //int i, j;
            int[] b = new int[30];
            int k = 0;
            for (int i = 0; i < 5; i++)
            {
                for (int j = 0; j < 6; j++)
                {
                    b[k++] = lala[i, j];
                }
            }
    
            for (int i = 0; i < 5 * 6; i++)
            {
                Console.WriteLine(b[i] + " ");
            }
            Console.ReadKey();
    

    您的错误是在“i”和“j”变量声明中。我建议您在要使用的上下文中声明一个变量,而不是在该上下文之外重用它。

    【讨论】:

      【解决方案3】:

      使用 Linq 扩展方法 CastToArray 的快速单行代码就可以解决问题。我相信Cast 只是获取数组中的每个项目(从所有维度),将它们转换为指定的类型,然后在IEnumerable 中返回它们(ToArray 然后转换为数组):

      int[] oneDimensionalArray = twoDimensionalArray.Cast<int>().ToArray();
      

      另一种方法是使用foreach 循环,它将遍历二维数组的两个维度:

      int index = 0;
      
      foreach (var item in twoDimensionalArray)
      {
          oneDimensionalArray[index++] = item;
      }
      

      代码示例:

      var rnd = new Random();
      var rowCount = 10;
      var colCount = 10;
      
      // Populate two dimensional array. You could also use this "double for loop" structure 
      // to read the multi-dimensional array and then populate the one dimensional array.
      var twoD = new int[rowCount, colCount];
      
      for (var row = 0; row < rowCount; row++)
      {
          for (var col = 0; col < colCount; col++)
          {
              twoD[row, col] = rnd.Next();
          }
      }
      
      // Populate one dimensional array with a foreach loop. Use a separate 
      //  hold the index value for the one dimentional array
      var oneD = new int[rowCount * colCount];
      var index = 0;
      
      foreach (var item in twoD)
      {
          oneD[index++] = item;
      }
      

      【讨论】:

        猜你喜欢
        • 2016-02-18
        • 2018-02-19
        • 2020-03-26
        • 2021-11-23
        • 2021-07-20
        • 2021-11-21
        相关资源
        最近更新 更多