English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

دليل أساسي C#

دليل متقدم C#

C# موجه للبرمجة عبر الكائنات (OOP)

C# SortedList (قائمة الترتيب)

SortedList<TKey、TValue> و SortedList هي كلاسيكيات مجموعة يمكنها حفظ المفاتيح والأقيمات المرتبة بناءً على تنفيذ IComparer المرتبط. على سبيل المثال، إذا كان المفتاح نوعًا أصليًا، يتم ترتيب المفاتيح بشكل تصاعدي.

يدعم C# قائمة الترتيب المجهزة بشكل عام وغير المجهز بشكل عام. يُنصح باستخدام قائمة الترتيب المجهزة < TKey،TValue >، لأنها تعمل بشكل أسرع وأقل عرضة للخطأ من قائمة الترتيب غير المجهزة.

ميزات SortedList

  • SortedList<TKey,TValue> هي مجموعة من المفاتيح والأقيمات المرتبة حسب المفتاح.

  • يتم ترتيب العنصر عند إضافته فورًا. يتم ترتيب المفتاحين الأصليين بشكل تصاعدي بناءً على IComparer < T >، وترتيب المفتاحين المتمثيليين.

  • يتبع إلى مجال الـ System.Collection.Generic.

  • يجب أن يكون المفتاح فريدًا ولا يمكن أن يكون null.

  • يمكن أن تكون القيمة null أو مكررة.

  • يمكن الوصول إلى القيمة من خلال نقل المفتاح إلى محرر mySortedList[key].

  • يحتوي على عناصر من نوع KeyValuePair<TKey,TValue>.

  • يستخدم أقل ذاكرة مقارنة بـ SortedDictionary<TKey,TValue>.

  • يتم تحسين سرعة الوصول إلى البيانات الم排序ة، بينما يتم تحسين سرعة إدراج وإزالة زوج المفتاح-القيمة في SortedDictionary<TKey,TValue>.

إنشاء SortedList

يظهر المثال التالي كيفية إنشاء SortedList واسع النطاق وتحديد الزوج مفتاح-قيمة فيه.

//قائمة مفاتيح عددية، قيم نصية 
SortedList<int, string> numberNames = new SortedList<int, string>();
numberNames.Add(3, "Three");
numberNames.Add(1, "One");
numberNames.Add(2, "Two");
numberNames.Add(4, null);
numberNames.Add(10, "Ten");
numberNames.Add(5, "Five");
//سيؤدي إلى إطلاق استثناء
//numberNames.Add("Three", 3); //خطأ في الوقت التشغيل: يجب أن يكون المفتاح من نوع int
//numberNames.Add(1, "One"); //استثناء في الوقت التشغيل: المفتاح مكرر
//numberNames.Add(null, "Five"); //استثناء في الوقت التشغيل: لا يمكن أن يكون المفتاح null

في المثال السابق، تم إنشاء جسم SortedList<TKey,TValue> واسع النطاق من خلال تحديد نوع المفتاح والقيمة التي سيتم تخزينها. SortedList<int,string> سيخزن المفتاح من نوع int والقيمة من نوع string.

يستخدم طريقة Add() لإضافة زوج مفتاح-قيمة واحد إلى SortedList. لا يمكن أن يكون المفتاح null أو مكرر. إذا كان موجودًا، سيتم إطلاق استثناء في الوقت التشغيل. يمكن أن تكون القيمة مكررة، ويمكن أن تكون null إذا كان النوع يمكن أن يكون null.

في عملية إنشاء SortedList، يتم استخدام جملة initializer للجمعية لتحديد العديد من مفتاح-قيمة، مثل ما يلي.

//إنشاء مفتاح نصي و قيمة SortedList 
//استخدام جملة initializer للجمعية
SortedList<string, string> cities = new SortedList<string, string>()
                                    {
                                        {"London", "UK"},
                                        {"New York", "USA"},
                                        {"Mumbai", "India"},
                                        {"Johannesburg", "South Africa"}
                                    ;

بعد إضافة زوج مفتاح-قيمة لـ SortedList، سيتم ترتيب زوجات المفاتيح بناءً على ترتيب المفاتيح الأصلي. في المثال التالي، يتم عرض جميع المفاتيح والقيم باستخدام دائرة التكرار foreach.

SortedList<int,string> numberNames = new SortedList<int,string>()
                                    {
                                        {3, "Three"},
                                        {5, "Five"},
                                        {1, "One"}
                                    ;
Console.WriteLine("--- مفتاح القيمة الأولية--");
foreach(KeyValuePair<int, string> kvp in numberNames)
    Console.WriteLine("key: {0}, value: {1}", kvp.Key, kvp.Value);
numberNames.Add(6, "Six");
numberNames.Add(2, "Two");
numberNames.Add(4, "Four");
Console.WriteLine("--- بعد إضافة مفتاح جديد--");
foreach(var kvp in numberNames)
    Console.WriteLine("key: {0}, value: {1}", kvp.Key, kvp.Value);
الخروج:
--- مفتاح القيمة الأولية--
key: 1, value: One
key: 3, value: Three
key: 5, value: Five
--- بعد إضافة مفتاح جديد
key: 1, value: One
key: 2, value: Two
key: 3, value: Three
key: 4, value: Four
key: 5, value: Five
المفتاح: 6، القيمة: Six

وصول SortedList

في محول SortedList[key]، حدد مفتاحًا للحصول على أو تعيين قيمة في SortedList.

SortedList<int,string> numberNames = new SortedList<int,string>()
                                    {
                                        {3, "Three"},
                                        {1, "One"},
                                        {2, "Two"}
                                    ;
Console.WriteLine(numberNames[1]); // الناتج: One
Console.WriteLine(numberNames[2]); // الناتج: Two
Console.WriteLine(numberNames[3]); // الناتج: Three
//Console.WriteLine(numberNames[10]); // استثناء KeyNotFoundException عند التشغيل
numberNames[2] = "TWO"; // تحديث القيمة
numberNames[4] = "Four"; // إذا لم يكن المفتاح موجودًا، أضف مفتاحًا جديدًا

في الأعلى،numberNames[10] ستقوم بإلقاء استثناء KeyNotFoundException لأن المفتاح المحدد 10 غير موجود في sortedlist. للحماية من هذا الاستثناء، استخدم طريقة ContainsKey() أو TryGetValue()، كما هو موضح أدناه.

SortedList<int, string> numberNames = new SortedList<int,string>()
                                    {
                                        {3, "Three"},
                                        {1, "One"},
                                        {2, "Two"}
                                    ;
if(numberNames.ContainsKey(4)){
    numberNames[4] = "four";
}
int result;
if(numberNames.TryGetValue(4, out result))
    Console.WriteLine("Key: {0}, Value: {1}", 4, result);
الخروج:
Key:4, Value: Four

إذا كنت ترغب في استخدام دورة For لجمعات المفاتيح، استخدم خصائص Keys و Values.

SortedList<int, string> numberNames = new SortedList<int,string>()
                                    {
                                        {3, "Three"},
                                        {1, "One"},
                                        {2, "Two"}
                                    ;
for (int i = 0; i < numberNames.Count; i++)
{
    Console.WriteLine("key: {0}, value: {1}", numberNames.Keys[i], numberNames.Values[i]);
}
الخروج:
key: 1, value: One
key: 2, value: Two
key: 3, value: Three

إزالة العنصر من SortedList

استخدام طرق Remove(key) و RemoveAt(index) لإزالة زوج المفتاح من SortedList.

SortedList<int,string> numberNames = new SortedList<int,string>()
                                    {
                                        {3, "Three"},
                                        {1, "One"},
                                        {2, "Two"},
                                        {5, "Five"},
                                        {4, "Four"}
                                    ;
    
numberNames.Remove(1);//إزالة الزوج المفتاح 1
numberNames.Remove(10);//إزالة الزوج المفتاح 1، إذا لم يكن موجودًا، فإنه لا يوجد خطأ
numberNames.RemoveAt(0);//حذف الكائن من الموقع 0 
//numberNames.RemoveAt(10);//خطأ في الوقت التشغيل: ArgumentOutOfRangeException
foreach(var kvp in numberNames)
	Console.WriteLine("key: {0}, value: {1}", kvp.Key, kvp.Value);
الخروج:
key: 3, value: Three
key: 4, value: Four
key: 5, value: Five

هيكل SortedList

الشكل التالي يوضح هيكل SortedList.

يمكنك معرفة المزيد عن طرق SortedList وخصائصها في docs.microsoft.com