C# Programming

فرز مصفوفات بكفاءة بترتيب تنازلي باستخدام C#

Spread the love

يُعدّ فرز المصفوفات عملية أساسية في البرمجة. توفر لغة C# عدة طرق فعالة لفرز المصفوفات، بما في ذلك الترتيب التنازلي. تتناول هذه المقالة طريقتين أساسيتين: الاستفادة من Array.Sort() و Array.Reverse()، واستخدام طريقة OrderByDescending() في LINQ.

جدول المحتويات

الفرز باستخدام 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()

في السيناريوهات الأكثر تعقيدًا، خاصة عند العمل مع كائنات مخصصة أو عند الحاجة إلى معايير فرز أكثر تطوراً، توفر طريقة OrderByDescending() في LINQ مرونة أكبر. تستخدم هذه الطريقة تعبيرات لامدا لتحديد منطق الفرز.


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() حلاً أكثر قوة وسهولة في القراءة.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *