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

时间:2019-03-04 01:28:02

标签: c# sorting debugging

我正在尝试存储正在排序的数组的每个迭代。由于某种原因,我返回的锯齿状数组仅成为最终排序数组的数组。我的代码在下面,我无法弄清楚为什么会真正感谢您的帮助。谢谢。

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;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

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

数组是引用类型,因此,将它们分配给另一个变量时,您仅复制 reference ,而不是内容。如果您更改内容,所有引用将反映该内容

您可以使用Array.CopyoriginalArray的时间点复制值

...

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);

注意 这完全未经测试,我不知道其余代码是否按预期工作


其他资源

Array.Copy Method

  

将一个数组中的一系列元素复制到另一个数组中并执行   根据需要键入投放和拳击内容。

Arrays (C# Programming Guide)

  

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