C# Programming

C#高效降序数组排序

Spread the love

数组排序是编程中的一个基本操作。C# 提供了几种高效的数组排序方法,包括降序排序。本文将探讨两种主要方法:利用Array.Sort()Array.Reverse(),以及利用 LINQ 的OrderByDescending()方法。

目录

使用Array.Sort()Array.Reverse()进行排序

Array.Sort()方法默认情况下按升序对数组进行排序。要实现降序排序,我们首先按升序排序,然后使用Array.Reverse()反转数组。对于整数或字符串等简单数据类型,这种方法效率很高。


using System;

public class SortArrayDescending
{
    public static void Main(string[] args)
    {
        int[] numbers = { 5, 2, 8, 1, 9, 4 };

        Array.Sort(numbers); // 按升序排序
        Array.Reverse(numbers); // 反转为降序

        Console.WriteLine("降序排序后的数组:");
        foreach (int number in numbers)
        {
            Console.Write(number + " ");
        }
        // 输出:9 8 5 4 2 1
    }
}

这简洁地演示了该技术。初始的升序排序,然后反转,即可得到所需的降序。

使用OrderByDescending()进行排序

对于更复杂的场景,尤其是在处理自定义对象或需要更复杂的排序标准时,LINQ 的OrderByDescending()方法提供了更大的灵活性。此方法使用 lambda 表达式来定义排序逻辑。


using System;
using System.Linq;

public class SortArrayDescendingLinq
{
    public static void Main(string[] args)
    {
        int[] numbers = { 5, 2, 8, 1, 9, 4 };

        var sortedNumbers = numbers.OrderByDescending(x => x).ToArray();

        Console.WriteLine("降序排序后的数组:");
        foreach (int number in sortedNumbers)
        {
            Console.Write(number + " ");
        }
        // 输出:9 8 5 4 2 1


        // 自定义对象的示例
        var people = new[]
        {
            new Person { Name = "Alice", Age = 30 },
            new Person { Name = "Bob", Age = 25 },
            new Person { Name = "Charlie", Age = 35 }
        };

        var sortedPeopleByAge = people.OrderByDescending(p => p.Age).ToArray();

        Console.WriteLine("n按年龄降序排序的人员:");
        foreach (var person in sortedPeopleByAge)
        {
            Console.WriteLine($"{person.Name}: {person.Age}");
        }
        // 输出:Charlie: 35, Alice: 30, Bob: 25
    }

    public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }
}

此示例展示了如何按年龄对整数数组和自定义Person对象数组进行排序。请注意,OrderByDescending()返回一个IOrderedEnumerable<T>,需要使用ToArray()将其转换为数组。这种方法具有很高的可读性,并且可以适应各种排序需求,尽管对于简单数据类型而言,它可能会比第一种方法引入略高的开销。

选择哪种方法取决于您的具体需求和数据复杂性。对于简单数据类型,Array.Sort()Array.Reverse()效率更高。对于复杂对象和灵活的排序标准,OrderByDescending()提供更强大和易读的解决方案。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注