You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 00:52:07