我想按升序排序我的int数组.
首先我复制一下我的数组:
int[] copyArray = myArray.ToArray();
Run Code Online (Sandbox Code Playgroud)
然后我想按升序排序,如下所示:
int[] sortedCopy = from element in copyArray
orderby element ascending select element;
Run Code Online (Sandbox Code Playgroud)
但是我得到一个错误,"selected"得到了高位,错误是:"不能隐式地将类型'system.linq.iorderedenumerable'转换为'int []'"
Jon*_*Jon 47
您需要ToArray()在最后调用实际将有序序列转换为数组.LINQ使用惰性计算,这意味着,直到调用ToArray(),ToList()或一些其他类似的方法在中间处理(在这种情况下分选)将不被执行.
这样做已经复制了元素,因此您实际上不需要先创建自己的副本.
例:
int[] sortedCopy = (from element in myArray orderby element ascending select element)
.ToArray();
Run Code Online (Sandbox Code Playgroud)
在表达式语法中写这个可能更好:
int[] sortedCopy = myArray.OrderBy(i => i).ToArray();
Run Code Online (Sandbox Code Playgroud)
Mar*_*ell 20
注意:如果您不需要副本(即可以更改myArray),那么更简单,更有效的方法就是:
Array.Sort(myArray);
Run Code Online (Sandbox Code Playgroud)
这会对数组进行就地排序,利用它是一个尽可能高效的数组这一事实.
对于更复杂的场景(例如,成员级的对象阵列),您可以执行以下操作:
Array.Sort(entityArray, (x,y) => string.Compare(x.Name, y.Name));
Run Code Online (Sandbox Code Playgroud)
这是道德等同于:
var sortedCopy = entityArray.OrderBy(x => x.Name).ToArray();
Run Code Online (Sandbox Code Playgroud)
但又一次:就地进行排序.