C# Programming

Ordenação Eficiente de Arrays em Ordem Decrescente com C#

Spread the love

Ordenar arrays é uma operação fundamental na programação. C# oferece diversas maneiras eficientes de ordenar arrays, incluindo ordem decrescente. Este artigo explora duas abordagens principais: utilizando Array.Sort() e Array.Reverse(), e utilizando o método OrderByDescending() do LINQ.

Sumário

Ordenando com Array.Sort() e Array.Reverse()

O método Array.Sort(), por padrão, ordena um array em ordem crescente. Para alcançar a ordem decrescente, primeiro ordenamos em ordem crescente e então invertemos o array usando Array.Reverse(). Isso é eficiente para tipos de dados simples como inteiros ou strings.


using System;

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

        Array.Sort(numbers); // Ordena em ordem crescente
        Array.Reverse(numbers); // Inverte para ordem decrescente

        Console.WriteLine("Array ordenado em ordem decrescente:");
        foreach (int number in numbers)
        {
            Console.Write(number + " ");
        }
        // Saída: 9 8 5 4 2 1
    }
}

Isso demonstra concisamente a técnica. A ordenação crescente inicial seguida pela inversão fornece a ordem decrescente desejada.

Ordenando com OrderByDescending()

Para cenários mais complexos, especialmente quando se trabalha com objetos personalizados ou requer critérios de ordenação mais sofisticados, o método OrderByDescending() do LINQ oferece maior flexibilidade. Este método emprega expressões lambda para definir a lógica de ordenação.


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("Array ordenado em ordem decrescente:");
        foreach (int number in sortedNumbers)
        {
            Console.Write(number + " ");
        }
        // Saída: 9 8 5 4 2 1


        // Exemplo com objetos personalizados
        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("nPessoas ordenadas por idade em ordem decrescente:");
        foreach (var person in sortedPeopleByAge)
        {
            Console.WriteLine($"{person.Name}: {person.Age}");
        }
        // Saída: Charlie: 35, Alice: 30, Bob: 25
    }

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

O exemplo mostra a ordenação de um array de inteiros e um array de objetos Person personalizados por idade. Note que OrderByDescending() retorna um IOrderedEnumerable<T>, requerendo conversão para um array usando ToArray(). Esta abordagem é altamente legível e adaptável a várias necessidades de ordenação, embora possa introduzir um pouco mais de sobrecarga do que o primeiro método para tipos de dados simples.

A escolha entre esses métodos depende das suas necessidades específicas e da complexidade dos dados. Para tipos de dados simples, Array.Sort() e Array.Reverse() oferecem eficiência. Para objetos complexos e critérios de ordenação flexíveis, OrderByDescending() fornece uma solução mais poderosa e legível.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *