C# 在C中动态创建锯齿状数组的问题#

C# 在C中动态创建锯齿状数组的问题#,c#,sorting,debugging,C#,Sorting,Debugging,我试图在排序时存储数组的每个迭代。出于某种原因,我返回的锯齿状数组只是最终排序数组的一个数组。我的代码在下面,我不明白为什么任何帮助都会得到感谢。谢谢 namespace SortingUI.Utils { public class Sorting { public static int[][] SortInt(int[] originalArray) { int length = originalArray.Length;

我试图在排序时存储数组的每个迭代。出于某种原因,我返回的锯齿状数组只是最终排序数组的一个数组。我的代码在下面,我不明白为什么任何帮助都会得到感谢。谢谢

namespace SortingUI.Utils
{
    public class Sorting
    {
        public static int[][] SortInt(int[] originalArray)
        {
            int length = originalArray.Length;
            int tempVal, smallest;
            int[][] iterations = new int[length-1][];

            for (int i = 0; i < length - 1; i++)
            {
                smallest = i;
                for (int j = i + 1; j < length; j++)
                {
                    if (originalArray[j] < originalArray[smallest])
                    {
                        smallest = j;
                    }
                }
                tempVal = originalArray[smallest];
                originalArray[smallest] = originalArray[i];
                originalArray[i] = tempVal;
                iterations[i] = originalArray;
            }

            return iterations;
        }
    }
}
名称空间排序ui.Utils
{
公共类排序
{
公共静态int[]SortInt(int[]originalArray)
{
int length=原始数组长度;
int tempVal,最小;
int[][]迭代次数=新int[length-1][];
对于(int i=0;i
如果我理解您的问题,那么您获得相同值(而不是快照)的原因是您存储的是对数组的引用,而不是值本身的副本

数组是引用类型,所以当您将它们分配给另一个变量时,您只是复制引用而不是内容。如果更改内容,所有引用都将反映这一点

您可以利用从
原始阵列

...

var tempVal = originalArray[smallest];
originalArray[smallest] = originalArray[i];
originalArray[i] = tempVal;

// Create some new memory
iterations[i] = new int[originalArray.Length];
// Copy the contents 
Array.Copy(originalArray, iterations[i], originalArray.Length);
注意这是完全未经测试的,我不知道您的其余代码是否按预期工作


其他资源

将一个数组中的一系列元素复制到另一个数组并执行 根据需要键入铸件和装箱

数组类型是从抽象基类型数组派生的引用类型。由于此类型实现IEnumerable和IEnumerable, 可以在C#中的所有数组上使用foreach迭代


如果我理解您的问题,那么获得相同值(而不是快照)的原因是您存储的是对数组的引用,而不是值本身的副本

数组是引用类型,所以当您将它们分配给另一个变量时,您只是复制引用而不是内容。如果更改内容,所有引用都将反映这一点

您可以利用从
原始阵列

...

var tempVal = originalArray[smallest];
originalArray[smallest] = originalArray[i];
originalArray[i] = tempVal;

// Create some new memory
iterations[i] = new int[originalArray.Length];
// Copy the contents 
Array.Copy(originalArray, iterations[i], originalArray.Length);
注意这是完全未经测试的,我不知道您的其余代码是否按预期工作


其他资源

将一个数组中的一系列元素复制到另一个数组并执行 根据需要键入铸件和装箱

数组类型是从抽象基类型数组派生的引用类型。由于此类型实现IEnumerable和IEnumerable, 可以在C#中的所有数组上使用foreach迭代


“由于某种原因,我返回的参差不齐的数组只是最终排序数组的一个数组。”你具体的意思是什么,你实际上在尝试什么do@MichaelRandall我想存储一个数组数组,在这个数组中,通过排序的每次迭代我都会保存我正在排序的数组。然而,我返回的名为iterations的数组最终只是一个数组数组,每个元素都是最终排序的数组。啊,我明白了,那么你想要排序过程的快照吗?@MichaelRandall是的。看看我所拥有的,我不明白为什么,但是如果你传递函数[1,10,4,3],它只会返回一个数组,每个元素都是[1,3,4,10]。“出于某种原因,我返回的锯齿状数组会变成最终排序数组的数组。”你具体的意思是什么,你到底在尝试什么do@MichaelRandall我想存储一个数组数组,在这个数组中,通过排序的每次迭代我都会保存我正在排序的数组。然而,我返回的名为iterations的数组最终只是一个数组数组,每个元素都是最终排序的数组。啊,我明白了,那么你想要排序过程的快照吗?@MichaelRandall是的。我不明白为什么,但是如果你传递函数[1,10,4,3],它只会返回一个数组,每个元素都是[1,3,4,10]。是的!这就是解决办法。非常感谢,我很感激。是的!这就是解决办法。非常感谢,我很感激。