Unity中Array.Sort意外修改未指定数组问题求助
问题原因与解决办法
原因
你代码里的tempFitnessVals = fitnessVals;这行是引用赋值,不是复制数组内容。这意味着tempFitnessVals和fitnessVals指向内存中同一个数组实例,后续对tempFitnessVals调用Array.Sort()、Array.Reverse()时,本质上就是在修改原数组fitnessVals。
解决办法
要避免修改原数组,必须创建原数组的值拷贝,让tempFitnessVals指向一个全新的数组实例,包含原数组的所有内容。常用的几种方式:
方式1:使用Array.Copy()
tempFitnessVals = new float[numberOfItems]; // 将fitnessVals的内容复制到tempFitnessVals中 Array.Copy(fitnessVals, tempFitnessVals, numberOfItems);
方式2:使用数组的Clone()方法
// 直接克隆原数组,返回新的数组实例 tempFitnessVals = (float[])fitnessVals.Clone();
方式3:C# 8.0+ 可用数组切片
// 切片语法快速复制整个数组 tempFitnessVals = fitnessVals[..];
修改后的完整代码示例
// 替换原引用赋值为拷贝操作,这里用Clone()举例 tempFitnessVals = (float[])fitnessVals.Clone(); int[] indexes = new int[tempFitnessVals.Length]; for (int i = 0; i < indexes.Length; i++) { indexes[i] = i; } Array.Sort(tempFitnessVals, indexes); Array.Reverse(tempFitnessVals); Array.Reverse(indexes);
内容的提问来源于stack exchange,提问作者Frank
相关产品推荐
相关产品推荐

