Sort کردن آبجکت‌های کلاس با اینترفيس IComparable

Sort کردن آبجکت‌های کلاس با اینترفيس IComparable

پرکاربردترین ترتیب‌ها، ترتیب‌های عددی و واژه‌نامه‌ای هستند. مرتب‌سازی کارا در بهینه‌سازی الگوریتم‌هایی که به فهرست‌های مرتب شده نیاز دارند (مثل جستجو و ترکیب) اهمیت زیادی دارد. از آغاز علم رایانه مسائل مرتب‌سازی بررسی‌های فراوانی را متوجه خود ساختند، شاید به این علت که در عین ساده بودن، حل آن به صورت کارا پیچیده است. برای نمونه مرتب‌سازی حبابی در سال ۱۹۵۶ به وجود آمد. در حالی که بسیاری این را یک مسئلهی حل شده می‌پندارند، الگوریتم کارآمد جدیدی همچنان ابداع می‌شوند . مبحث مرتب‌سازی در کلاس‌های معرفی علم رایانه بسیار پرکاربرد است، مبحثی که در آن وجود الگوریتم‌های فراوان به آشنایی با ایده‌های کلی و مراحل طراحی الگوریتم‌های گوناگون کمک می‌کند؛ مانند تحلیل الگوریتم، داده‌ساختارها، الگوریتم‌های تصادفی، تحلیل بدترین و بهترین حالت و حالت میانگین، هزینهی زمان و حافظه، و حد پایین.

کلاس مورد نظر باید اینترفيس IComparable رو پياده سازی کند. (این اینترفيس تنها یک متد CompareTo دارد) به نحوه‌‌ی پياده سازی متد CompareTo دقت کنيد:

public class Person : IComparable { private string _firstname; public string Firstname { get { return _firstname; } set { _firstname = value; } } private string _lastname; public string Lastname { get { return _lastname; } set { _lastname = value; } } private int _age; public int Age { get { return _age; } set { _age = value; } } public Person(string firstname, string lastname, int age) { _firstname = firstname; _lastname = lastname; _age = age; } public int CompareTo(object obj) { if (obj is Person) { Person p2 = (Person)obj; return _firstname.CompareTo(p2.Firstname); } else throw new ArgumentException("Object is not a Person."); } public override string ToString() { return String.Format("{0} {1}, Age = {2}", _firstname, _lastname, _age.ToString()); } }

مثال Sort کردن افراد از روی اسم کوچک (استفاده از کلاس بالا):

List persons = new List(); persons.Add(new Person("Behrouz", "Rad", 30)); persons.Add(new Person("Omid", "Mottaghi Rad", 31)); persons.Add(new Person("Mehdi", "Keramati", 32)); persons.Add(new Person("Ali", "Keshavarz", 33)); persons.Add(new Person("Mohammad", "Hashemian", 34)); persons.Add(new Person("Farhad", "XXX", 35)); //Before Sorting listBox1.Items.AddRange(persons.ToArray()); //Sُorting List persons.Sort(); //Sorted List listBox2.Items.AddRange(persons.ToArray());



نظرات کاربران



عبارت امنیتی : حاصل 2 × 8 می شود :
متن پیام :