以降序排序数组的更好方法

时间:2011-03-25 08:18:02

标签: c# linq sorting

我有一个int数组,我必须按降序排序。

因为我没有找到任何方法来按降序对数组进行排序。目前我按照下面的顺序对数组进行排序

int[] array = new int[] { 3, 1, 4, 5, 2 };
Array.Sort<int>( array );
Array.Reverse( array );

现在问题是。在c#中有更好的方法吗?

7 个答案:

答案 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
  }); 

了解更多信息:

Sorting arrays
MSDN - Array.Sort Method (T[], Comparison)

答案 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);
        }

    }