【问题标题】:Printing 2D array in matrix format以矩阵格式打印二维数组
【发布时间】:2012-10-01 08:41:24
【问题描述】:

我有一个二维数组如下:

long[,] arr = new long[4, 4] {{ 0, 0, 0, 0 },
                              { 1, 1, 1, 1 },
                              { 0, 0, 0, 0 },
                              { 1, 1, 1, 1 }};

我想以矩阵格式打印此数组的值,例如:

0 0 0 0
1 1 1 1
0 0 0 0
1 1 1 1

我该怎么做?

【问题讨论】:

    标签: c# multidimensional-array


    【解决方案1】:

    您可以这样做(稍微修改数组以表明它适用于非方形数组):

            long[,] arr = new long[5, 4] { { 1, 2, 3, 4 }, { 1, 1, 1, 1 }, { 2, 2, 2, 2 }, { 3, 3, 3, 3 }, { 4, 4, 4, 4 } };
    
            int rowLength = arr.GetLength(0);
            int colLength = arr.GetLength(1);
    
            for (int i = 0; i < rowLength; i++)
            {
                for (int j = 0; j < colLength; j++)
                {
                    Console.Write(string.Format("{0} ", arr[i, j]));
                }
                Console.Write(Environment.NewLine + Environment.NewLine);
            }
            Console.ReadLine();
    

    【讨论】:

    • 你可以使用 Environment.NewLine 而不是 "\n",这是推荐的并且总是有效的
    • 这里不需要string.Format,可以简化为Console.Write("{0} ", arr[i, j]);
    • 我有错误Wrong number of indices inside []。解决方案是arr[i][j]
    【解决方案2】:

    像这样:

    long[,] arr = new long[4, 4] { { 0, 0, 0, 0 }, { 1, 1, 1, 1 }, { 0, 0, 0, 0 }, { 1, 1, 1, 1 } };
    
    var rowCount = arr.GetLength(0);
    var colCount = arr.GetLength(1);
    for (int row = 0; row < rowCount; row++)
    {
        for (int col = 0; col < colCount; col++)               
            Console.Write(String.Format("{0}\t", arr[row,col]));
        Console.WriteLine();
    } 
    

    【讨论】:

    • 您需要左填充数字以便列对齐
    • 这不会在数字之间放置空格。
    • 你的例子在我的VS2010电脑上无法编译
    【解决方案3】:

    我写了扩展方法

    public static string ToMatrixString<T>(this T[,] matrix, string delimiter = "\t")
    {
        var s = new StringBuilder();
    
        for (var i = 0; i < matrix.GetLength(0); i++)
        {
            for (var j = 0; j < matrix.GetLength(1); j++)
            {
                s.Append(matrix[i, j]).Append(delimiter);
            }
    
            s.AppendLine();
        }
    
        return s.ToString();
    }
    

    只需调用方法即可使用

    results.ToMatrixString();
    

    【讨论】:

    • 这是使它成为一种方法的答案。谢谢!
    【解决方案4】:

    以下是在 Unity 中的操作方法:

    (来自@markmuetz 的修改答案,所以一定要upvote his answer

    int[,] rawNodes = new int[,]
    {
        { 0, 0, 0, 0, 0, 0 },
        { 0, 0, 0, 0, 0, 0 },
        { 0, 0, 0, 0, 0, 0 },
        { 0, 0, 0, 0, 0, 0 },
        { 0, 0, 0, 0, 0, 0 }
    };
    
    private void Start()
    {
        int rowLength = rawNodes.GetLength(0);
        int colLength = rawNodes.GetLength(1);
        string arrayString = "";
        for (int i = 0; i < rowLength; i++)
        {
            for (int j = 0; j < colLength; j++)
            {
                arrayString += string.Format("{0} ", rawNodes[i, j]);
            }
            arrayString += System.Environment.NewLine + System.Environment.NewLine;
        }
    
        Debug.Log(arrayString);
    }
    

    【讨论】:

      【解决方案5】:

      你可以在短时间内做到这一点。

              int[,] values=new int[2,3]{{2,4,5},{4,5,2}};
      
              for (int i = 0; i < values.GetLength(0); i++)
              {
                  for (int k = 0; k < values.GetLength(1); k++) {
                      Console.Write(values[i,k]);
                  }
      
                  Console.WriteLine();
              }
      

      【讨论】:

      • 数组元素之间的空格怎么办。这确实可以区分行。
      • 我们在问题的预期答案中看不到值之间的空格,不是吗?
      【解决方案6】:

      你也可以这样做

              long[,] arr = new long[4, 4] { { 0, 0, 0, 0 }, { 1, 1, 1, 1 }, { 0, 0, 0, 0 }, { 1, 1, 1, 1 }};
      
              for (int i = 0; i < arr.GetLength(0); i++)
              {
                  for (int j = 0; j < arr.GetLength(1); j++)
                  {
                      Console.Write(arr[i,j]+" ");
                  }
                  Console.WriteLine();
              }
      

      【讨论】:

        【解决方案7】:

        如果使用方阵:

            int[,] mat = new int[,]{{ 1, 0, 0 },{ 0, 1, 0},{ 0, 0, 1}};
            int i=1;
            foreach(int e in mat){
                Console.Write(i%Math.Sqrt(mat.Length)==0? $"{e}\n" : e);
                i+=1;
            }
        

        【讨论】:

          猜你喜欢
          • 2011-07-01
          • 1970-01-01
          • 1970-01-01
          • 2020-06-12
          • 2021-11-20
          • 1970-01-01
          • 1970-01-01
          • 2023-03-25
          • 2016-03-10
          相关资源
          最近更新 更多