我有一个int数组,我必须按降序排序。按降序排列数组的更好方法
由于我没有找到降序order.Currently我排数组按降序排列如下
int[] array = new int[] { 3, 1, 4, 5, 2 };
Array.Sort<int>(array);
Array.Reverse(array);
现在数组进行排序的任何方法,问题是that.Is有没有更好的办法在c#中做同样的事情?
我有一个int数组,我必须按降序排序。按降序排列数组的更好方法
由于我没有找到降序order.Currently我排数组按降序排列如下
int[] array = new int[] { 3, 1, 4, 5, 2 };
Array.Sort<int>(array);
Array.Reverse(array);
现在数组进行排序的任何方法,问题是that.Is有没有更好的办法在c#中做同样的事情?
根据不同的排序顺序,你可以这样做:
int[] array = new int[] { 3, 1, 4, 5, 2 };
Array.Sort<int>(array,
new Comparison<int>(
(i1, i2) => i2.CompareTo(i1)
));
...或这个:
int[] array = new int[] { 3, 1, 4, 5, 2 };
Array.Sort<int>(array,
new Comparison<int>(
(i1, i2) => i1.CompareTo(i2)
));
I1和I2是刚刚相反。
是的,你可以通过谓词进行排序。这将是你的反向实施。
您可以指定一个比较器(IComparer实现)作为Array.Sort中的一个参数,排序的顺序实际上取决于比较器。默认比较器用于升序排序
使用LINQ OrderByDescending
方法。它会返回IOrderedIEnumerable<int>
,如果需要,您可以将其转换回数组。一般而言,List<>
s功能更强,然后Array
s。
array = array.OrderByDescending(c => c).ToArray();
你击败了我! :) – 2011-03-25 08:27:13
这是一个简短的工作代码,但如果数组很大,它不是非常有效(在性能方面),因为数组首先被转换为列表,然后被排序,最后转换为数组。我错了吗 ? – JYL 2011-03-25 09:14:42
@Ilyusha,如果从复合对象(不是简单对象)的角度考虑int,那么int就是与其他对象相同的对象,因为你需要比较两个对象中的任何一个,直到第一个差异,所以O(n)是不可能的结果 – 2011-06-29 15:28:32
当然,你可以自定义的排序。
您需要将Sort()委托给一个将用于排序的比较方法。
使用匿名方法:
Array.Sort<int>(array,
delegate(int a, int b)
{
return b - a; //Normal compare is a-b
});
了解更多关于它:
如果发生溢出,将无法正常工作。 – Henrik 2017-02-22 08:23:45
这一点,或者只是添加'-'(减号)之前'CompareTo' – digEmAll 2011-03-25 08:31:11
@digEmAll:绝对;) – JYL 2011-03-25 08:32:08
或简单地'Array.Sort(数组,(a,b)=> b.CompareTo(a))'反向排序。 – 2014-11-06 12:04:30