我正在尝试存储正在排序的数组的每个迭代。由于某种原因,我返回的锯齿状数组仅成为最终排序数组的数组。我的代码在下面,我无法弄清楚为什么会真正感谢您的帮助。谢谢。
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;
}
}
}
答案 0 :(得分:0)
如果我理解您的问题,那么得到相同值(而不是快照)的原因是因为您存储的是对数组的引用,而不是值本身的副本。
数组是引用类型,因此,将它们分配给另一个变量时,您仅复制 reference ,而不是内容。如果您更改内容,所有引用将反映该内容
您可以使用Array.Copy
从originalArray
的时间点复制值
...
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 派生的引用类型。由于此类型实现IEnumerable和IEnumerable, 您可以在C#中的所有数组上使用foreach迭代。