gpt4 book ai didi

c# - Array.sort 函数影响数组,我认为它不应该影响

转载 作者:太空宇宙 更新时间:2023-11-03 20:09:48 25 4
gpt4 key购买 nike

(简化)代码:

Line 1     Temporary = ArrayX;            
Line 2 Array.Sort(Temporary, ArrayY);

我通过单步执行代码记录了以下结果:

第一行之前:

Array X = 3, 2, 1
Array Y = 1, 2, 3
Temporary = 0 ,0 ,0

第 2 行之前:

Array X = 3, 2, 1
Array Y = 1, 2, 3
Temporary = 3, 2, 1

(到目前为止一切顺利)

第 3 行之后:

Array X = 1, 2, 3    //<-- Why is this affected by Line 2??
Array Y = 3, 2, 1
Temporary = 1, 2, 3

如您所见,无论出于何种原因,ArrayX 都会受到排序函数的影响。老实说,我看不出有任何理由应该如此。

编辑 - 那么应该这样排序吗?看起来有点笨拙。

for (int i =0; i<3; i++)
{
Temporary[i] = ArrayX[i];
}

最佳答案

这是因为您正在处理引用类型。 TemporaryArrayX指向/是对内存中相同位置的引用。在您使用这些引用之一修改集合中的某些值的任何地方,您都在更改相同的数据。如果你想修改相同数据的不同版本,那么你应该做类似的事情;

        var temp = ArrayX.ToList();

这将返回 List<T>其中 T是数组的类型 ( T[] )。如果您然后执行类似 sort temp 的操作它将对副本和 ArrayX 进行排序将保持不变。

关于c# - Array.sort 函数影响数组,我认为它不应该影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20751356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com