كيفية ترتيب قاموس حسب القيمة في C#

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

المشكلة: فرز القاموس

يتكون القاموس في C# من أزواج من المفاتيح والقيم، وعلى الرغم من أن فئة SortedList مفيدة للفرز بناءً على قيمة واحدة، إلا أنها تفتقر إلى القدرة على ترتيب القواميس حسب قيمها مباشرة. محاولة استخدام SortedDictionary لن تحقق النتائج المرجوة، حيث أنها تنظم بناءً على المفاتيح بدلاً من القيم.

فكيف يمكنك فرز القاموس بفعالية حسب قيمه؟

الحل: الفرز باستخدام LINQ

لفرز قاموس حسب القيمة، يمكنك الاستفادة من مساحة الأسماء System.Linq التي توفر أدوات قوية لاستعلام المجموعات.

خطوات الفرز خطوة بخطوة

إليك تفصيل خطوة بخطوة حول كيفية فرز قاموس حسب قيمه، باستخدام كل من الصياغات القديمة والحديثة في C#.

1. إعداد قاموسك

تأكد من أن لديك قاموس جاهز ليتم فرزه. إليك مثال على كيف قد يبدو:

Dictionary<string, int> wordFrequencies = new Dictionary<string, int>
{
    { "apple", 5 },
    { "orange", 3 },
    { "banana", 2 },
    { "grape", 6 }
};

2. تحويل القاموس إلى قائمة

لفرز حسب القيمة، يجب أولاً تحويل القاموس الخاص بك إلى قائمة من KeyValuePairs:

using System.Linq;
List<KeyValuePair<string, int>> myList = wordFrequencies.ToList();

3. فرز القائمة

بعد ذلك، سترغب في فرز القائمة. بالنسبة لـ C# المستهدفة لـ .NET 2.0 أو أحدث، يمكنك استخدام طريقة Sort. إليك كيفية فرز القائمة باستخدام Delegate:

myList.Sort(
    delegate(KeyValuePair<string, int> pair1,
             KeyValuePair<string, int> pair2)
    {
        return pair1.Value.CompareTo(pair2.Value);
    }
);

4. التبسيط باستخدام تعبير لامدا

إذا كنت تعمل مع .NET 3.0 أو أحدث، يمكنك استخدام صياغة أكثر إيجازًا مع تعبيرات لامدا:

myList.Sort((pair1, pair2) => pair1.Value.CompareTo(pair2.Value));

القاموس المرتب الناتج

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

الخلاصة

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

من خلال الاستفادة من هذه الخطوات البسيطة، يمكنك تعزيز مهاراتك في برمجة C# بشكل أكبر وإدارة قواميسك بشكل أكثر فعالية. برمجة سعيدة!