当我对其副本的子数组进行排序时,为什么锯齿状数组的子数组会排序?

0 c# arrays sorting jagged-arrays

我有以下锯齿状阵列-

int[][] triangle = 
{
    new int[] {    3    },
    new int[] {   7,4   },
    new int[] {  2,4,6  },
    new int[] { 8,5,9,3 }
};
Run Code Online (Sandbox Code Playgroud)

然后我复制了它-

int[][] temporaryTriangle = new int[triangle.Length][];
Array.Copy(triangle, temporaryTriangle, triangle.Length);
Run Code Online (Sandbox Code Playgroud)

我对副本的子数组进行了排序-

for (int i = 0; i < temporaryTriangle.Length; i++)
{
    Array.Sort(temporaryTriangle[i]);
}
Run Code Online (Sandbox Code Playgroud)

我发现源数组的子数组也被排序了!我的问题是为什么会发生这种情况,我的意思是为什么当我对副本的子数组进行排序时,数组的子数组会被排序?

用法:

foreach (var subarray in triangle)
    Console.WriteLine(string.Join(" ", subarray));

foreach (var subarray in temporaryTriangle)
    Console.WriteLine(string.Join(" ", subarray));

// Output:
// 3
// 4 7
// 2 4 6
// 3 5 8 9
// 3
// 4 7
// 2 4 6
// 3 5 8 9
Run Code Online (Sandbox Code Playgroud)

我问的是什么问题而不是如何解决它。那么将锯齿状数组的值克隆到第二个数组的极快方法?不回答我的问题。

sag*_*agi 5

尽管您认为您制作了该数组的副本(实际上您做了),但您只是深度复制了外部数组,并且每个元素都是通过引用复制的。您应该循环新数组,并将前一个元素的每个元素深度复制到其中。