我有一个int数组,我必须按降序排序。
因为我没有找到任何方法来按降序对数组进行排序。目前我按照下面的顺序对数组进行排序
int[] array = new int[] { 3, 1, 4, 5, 2 };
Array.Sort<int>( array );
Array.Reverse( array );
现在问题是。在c#中有更好的方法吗?
答案 0 :(得分:61)
使用LINQ OrderByDescending
方法。它返回IOrderedIEnumerable<int>
,如果需要,可以将其转换回Array。通常,List<>
s比Array
更具功能性。
array = array.OrderByDescending(c => c).ToArray();
答案 1 :(得分:55)
根据排序顺序,您可以执行以下操作:
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刚刚逆转。
答案 2 :(得分:9)
当然,您可以自定义排序。
您需要将Sort()作为委托给它将用于排序的比较方法。
使用匿名方法:
Array.Sort<int>( array,
delegate(int a, int b)
{
return b - a; //Normal compare is a-b
});
了解更多信息:
答案 3 :(得分:3)
对于降序就地排序:
int[] numbers = { 1, 2, 3 };
Array.Sort(numbers, (a, b) => b - a);
用于异地排序(对输入数组无更改):
int[] numbers = { 1, 2, 3 };
var sortedNumbers = numbers.OrderByDescending(x => x).ToArray();
答案 4 :(得分:2)
是的,您可以将谓词传递给排序。那将是你的反向实施。
答案 5 :(得分:2)
您可以将比较器(IComparer实现)指定为Array.Sort中的参数,排序顺序实际上取决于comparer。默认比较器用于升序排序
答案 6 :(得分:0)
class Program
{
private static int[] table;
static void Main(string[] args)
{
int[] ints = new int[] { 6, 2, 5, 99, 55 };
table = ints.OrderByDescending(x => x).ToArray();
foreach (var item in table)
{
Console.WriteLine(item);
}
}