static int[] scores = new int[100];
static int[] scorescopy;
public static int orderscores()
{
scorescopy = scores;
Array.Sort(scorescopy);
int sortingtoolb = 0;
return 0;
}
我正在尝试获取我的初始数组的副本,然后尝试对该副本进行排序。但是,当我使用Array.Sort()函数时,我的第一个数组也会继续排序,但我想保留它。我试图在scorecopy上取消新的声明,但这并没有影响结果。
另外,有没有办法将数组中未使用的变量保持为null? (如果我没有使用它的所有部分,我在数组的开头会得到一堆0)。
我在运行Windows 8.1 Pro的系统上使用Visual Studio Express 2012 for Windows 8。
答案 0 :(得分:6)
数组在分配时仅复制对内存中同一数组的引用。您需要实际复制此值才能起作用:
public static int orderscores()
{
scorescopy = scores.ToArray(); // Using LINQ to "cheat" and make the copy simple
Array.Sort(scorescopy);
int sortingtoolb = 0;
return 0;
}
请注意,您可以通过以下方式执行此操作:
scorescopy = new int[scores.Length];
Array.Copy(scores, scorescopy, scores.Length);
//... rest of your code
答案 1 :(得分:3)
表达式scorescopy = scores;
复制数组的句柄。
如果要创建数组项的副本,则应将该行更改为:
scores.copyTo(scorescopy,0);
您仍然需要确保scorecopy
有足够的空间存放物品
所以你还需要这个表达式:static int[] scorescopy = new int[scores.Length];
现在你的代码应该是这样的:
static int[] scores = new int[100];
static int[] scorescopy = new int[scores.Length];
public static int orderscores()
{
scores.copyTo(scorescopy,0);
Array.Sort(scorescopy);
int sortingtoolb = 0;
return 0;
}
答案 2 :(得分:2)
你得到一个指向同一个数组的指针,你想要一个克隆:
scorescopy = (int [])scores.Clone();