内容简介:翻译自:https://stackoverflow.com/questions/27197988/array-sort-sorts-original-array-and-not-just-copy
此代码段来自C#2010 for Dummies.令我困惑的是,当使用Array.Sort()方法时,我的数组副本(sortedNames)和原始数组(行星)都会被排序,即使它只调用sortedNames上的Sort方法.
第二个foreach循环引用哪个数组无关紧要,输出是相同的.
static void Main(string[] args) { Console.WriteLine("The 5 planets closest to the sun, in order: "); string[] planets = new string[] { "Mercury","Venus", "Earth", "Mars", "Jupiter"}; foreach (string planet in planets) { Console.WriteLine("\t" + planet); } Console.WriteLine("\nNow listed alphabetically: "); string[] sortedNames = planets; Array.Sort(sortedNames); foreach (string planet in planets) { Console.WriteLine("\t" + planet); } }
sortedNames和行星都指向同一个数组.基本上两个变量都指向内存中的相同位置,因此当您在任一变量上调用Array.Sort时,对这两个变量都会反映对数组的更改.
由于C#中的数组是引用类型,因此sortedNames和行星都“指向”内存中的相同位置.
将此与值类型进行对比,后者将数据保存在自己的内存分配中,而不是指向内存中的另一个位置.
如果你想保持行星不变,可以使用创建一个全新的数组,然后使用Array.Copy用行星的内容填充新数组:
/* Create a new array that's the same length as the one "planets" points to */ string[] sortedNames = new string[planets.Length]; /* Copy the elements of `planets` into `sortedNames` */ Array.Copy(planets, sortedNames, planets.Length); /* Sort the new array instead of `planets` */ Array.Sort(sortedNames);
或者,使用LINQ,您可以使用OrderBy和ToArray创建一个新的有序数组:
string[] sortedNames = planets.OrderBy(planet => planet).ToArray();
一些可能有助于值类型和引用类型的资源:
> Value types and Reference Types (MSDN)
> What is the difference between a reference type and value type in c#?
翻译自:https://stackoverflow.com/questions/27197988/array-sort-sorts-original-array-and-not-just-copy
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- JavaScript数组-排序算法
- 数组的去重和排序
- javascript 数组排序(sort,冒泡)
- Go 寻找数组中最小的 k 个数:全部排序和部分排序
- JS骚操作之数组快速排序
- 数组排序并插入值算法(JavaScript)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
像程序员一样思考
V. Anton Spraul / 徐波 / 人民邮电出版社 / 2013-6 / 49.00元
编程的真正挑战不是学习一种语言的语法,而是学习创造性地解决问题,从而构建美妙的应用。《像程序员一样思考》分析了程序员解决问题的方法,并且教授你其他图书所忽略的一种能力,即如何像程序员一样思考。全书分为8章。第1章通对几个经典的算法问题切入,概括了问题解决的基本技巧和步骤。第2章通过实际编写C++代码来解决几个简单的问题,从而让读者进一步体会到问题解决的思路和应用。第3到7章是书中的主体部分,分别探......一起来看看 《像程序员一样思考》 这本书的介绍吧!