C# Programming

إتقان فرز المصفوفات في C#

Spread the love

توفر C# طرقًا قوية ومتنوعة لفرز المصفوفات. يستكشف هذا الدليل سيناريوهات متنوعة، من مصفوفات الأعداد الصحيحة البسيطة إلى مصفوفات الكائنات المعقدة، مع توضيح قوة ومرونة إمكانيات الفرز في C#.

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

فهم Array.Sort()

تُعدُّ طريقة Array.Sort() حجر الزاوية في فرز المصفوفات في C#. وهي توفر العديد من الإصدارات الزائدة للتعامل مع أنواع البيانات المتنوعة ومتطلبات الفرز. باستخدام خوارزمية الفرز السريع بشكل أساسي، فإنها تقوم بفرز المصفوفات بكفاءة في مكانها، مما يعدل المصفوفة الأصلية مباشرة دون إنشاء نسخة.


int[] numbers = { 5, 2, 8, 1, 9, 4 };
Array.Sort(numbers); // ترتيب تصاعدي

Console.WriteLine(string.Join(", ", numbers)); // الإخراج: 1, 2, 4, 5, 8, 9

يُظهر هذا المثال الأساسي Array.Sort() مع مصفوفة من الأعداد الصحيحة. يتم فرز المصفوفة بترتيب تصاعدي في مكانها.

فرز مصفوفات السلاسل النصية

فرز مصفوفات السلاسل النصية سهل بنفس القدر. تعتمد Array.Sort() بشكل افتراضي على الترتيب المعجمي (الأبجدي).


string[] names = { "David", "Alice", "Charlie", "Bob" };
Array.Sort(names);

Console.WriteLine(string.Join(", ", names)); // الإخراج: Alice, Bob, Charlie, David

المقارنات المخصصة

للحصول على تحكم أدق، تعد المقارنات المخصصة باستخدام الواجهات الوظيفية أو تعبيرات لامدا ذات قيمة كبيرة. وهذا أمر بالغ الأهمية عند فرز الكائنات بناءً على خصائص محددة أو استخدام ترتيب غير قياسي.


int[] numbers = { 5, 2, 8, 1, 9, 4 };
Array.Sort(numbers, (x, y) => y.CompareTo(x)); // ترتيب تنازلي

Console.WriteLine(string.Join(", ", numbers)); // الإخراج: 9, 8, 5, 4, 2, 1

يعكس تعبير لامدا (x, y) => y.CompareTo(x) المقارنة، مما يؤدي إلى ترتيب تنازلي.

فرز مصفوفات الكائنات

يتطلب فرز مصفوفات الكائنات تحديد خاصية الفرز. المقارنة المخصصة ضرورية.


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

Person[] people = {
    new Person { Name = "Bob", Age = 30 },
    new Person { Name = "Alice", Age = 25 },
    new Person { Name = "Charlie", Age = 35 }
};

Array.Sort(people, (x, y) => x.Age.CompareTo(y.Age)); // فرز حسب العمر

foreach (var person in people)
{
    Console.WriteLine($"{person.Name} - {person.Age}");
}

LINQ للفرز

في السيناريوهات الأكثر تعقيدًا أو عند العمل مع List<T>، يوفر LINQ إمكانيات فرز قوية. توفر OrderBy() و OrderByDescending() فرزًا مرنًا مع مُقارنات مخصصة.


List<Person> peopleList = people.ToList();
var sortedPeopleByName = peopleList.OrderBy(p => p.Name);

foreach (var person in sortedPeopleByName)
{
    Console.WriteLine($"{person.Name} - {person.Age}");
}

اعتبارات الأداء

على الرغم من أن Array.Sort() فعّالة بشكل عام، إلا أنه يجب مراعاة حجم البيانات وتعقيد المقارنة عند التعامل مع مصفوفات كبيرة جدًا. بالنسبة لمجموعات البيانات الضخمة، قد يؤدي استكشاف خوارزميات الفرز المتخصصة أو تقنيات المعالجة المتوازية إلى تحسين الأداء.

الخلاصة

آليات فرز المصفوفات في C# فعالة للغاية لأنواع البيانات المتنوعة واحتياجات الفرز. إن إتقان المقارنات المخصصة والاستفادة من LINQ عند الاقتضاء يضمن فرزًا فعالًا ومرنًا في تطبيقاتك.

الأسئلة الشائعة

  • س: هل Array.Sort() ثابت؟ ج: نعم، إنه فرز ثابت؛ يتم الحفاظ على الترتيب النسبي للعناصر المتساوية.
  • س: ما هي الخوارزمية التي تستخدمها Array.Sort()؟ ج: عادةً ما تستخدم خوارزمية الفرز السريع أو متغير فرز داخلي، واختيار الخوارزمية الأكثر كفاءة ديناميكيًا بناءً على البيانات.
  • س: كيف يتم فرز List<T>؟ ج: استخدم List<T>.Sort() أو طرق OrderBy()/OrderByDescending() في LINQ.

اترك تعليقاً

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