JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

使用DeepClone沿数组对角线翻转180度

wys521 2024-11-13 15:11:14 精选教程 25 ℃ 0 评论

需求,有一个二维数组,如下:

1

2

3

4

5

6

7

8

9

沿着对角线:1,5,9 翻转180度,变成如下数组:

1

4

7

2

5

8

3

6

9

思路: 利用一个中间临时数组,然后遍历临时数组,进行数组翻转;因为数组是引用类型,所以要clone一个新的数组,不能直接赋值,否则得出的结果不对。用到了一个DeepClone深度克隆库,挺好用的。

代码如下:

static void Main(string[] args)
{
  float[][] arr01 = new float[][] {
    new float[]{1,2,3},
    new float[]{4,5,6},
    new float[]{7,8,9}
  };
  Console.WriteLine("翻转前:");
  Console.WriteLine(getArrStr(arr01));
  int len = arr01.Length;
  //你可以这样:
  //for (int i = 0; i < len; i++)
  //{
  // temp[i] = new float[len];
  // for (int j = 0; j < len; j++)
  // {
  // temp[i][j] = arr01[i][j];
  // }
  //}
  //******也可以这样 DeepClone库,深度克隆库
  float[][] temp = arr01.DeepClone();
  //******但不能这样:
  //float[][] temp = arr01;
  for (int i = 0; i < temp.Length; i++)
  {
    for (int j = 0; j < len; j++)
    {
      if (i == j)
      {
      	continue;
      }
      arr01[i][j] = temp[j][i]; //翻转数组
  }
}
Console.WriteLine("结果");
Console.WriteLine(getArrStr(arr01));
/// <summary>
/// flattern Array
/// </summary>
/// <param name="arr"></param>
/// <returns></returns>
private static string getArrStr(float[][] arr)
{
  StringBuilder sb = new StringBuilder();
  for (int i = 0; i < arr.Length; i++)
  {
  sb.Append("\r\n");
  for (int j = 0; j < arr.Length; j++)
  {
  sb.Append("\t" + arr[i][j].ToString("G3"));
  }
  }
  return sb.ToString();
}

结果如下:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表