English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
SortedList<TKey、TValue> و SortedList هي كلاسيكيات مجموعة يمكنها حفظ المفاتيح والأقيمات المرتبة بناءً على تنفيذ IComparer المرتبط. على سبيل المثال، إذا كان المفتاح نوعًا أصليًا، يتم ترتيب المفاتيح بشكل تصاعدي.
يدعم C# قائمة الترتيب المجهزة بشكل عام وغير المجهز بشكل عام. يُنصح باستخدام قائمة الترتيب المجهزة < TKey،TValue >، لأنها تعمل بشكل أسرع وأقل عرضة للخطأ من قائمة الترتيب غير المجهزة.
SortedList<TKey,TValue> هي مجموعة من المفاتيح والأقيمات المرتبة حسب المفتاح.
يتم ترتيب العنصر عند إضافته فورًا. يتم ترتيب المفتاحين الأصليين بشكل تصاعدي بناءً على IComparer < T >، وترتيب المفتاحين المتمثيليين.
يتبع إلى مجال الـ System.Collection.Generic.
يجب أن يكون المفتاح فريدًا ولا يمكن أن يكون null.
يمكن أن تكون القيمة null أو مكررة.
يمكن الوصول إلى القيمة من خلال نقل المفتاح إلى محرر mySortedList[key].
يحتوي على عناصر من نوع KeyValuePair<TKey,TValue>.
يستخدم أقل ذاكرة مقارنة بـ SortedDictionary<TKey,TValue>.
يتم تحسين سرعة الوصول إلى البيانات الم排序ة، بينما يتم تحسين سرعة إدراج وإزالة زوج المفتاح-القيمة في SortedDictionary<TKey,TValue>.
يظهر المثال التالي كيفية إنشاء 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[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
استخدام طرق 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 وخصائصها في docs.microsoft.com