PDA

View Full Version : سوال: نحوه استفاده جالب از delegate در مثال زیر



دلتنگ اسمان
یک شنبه 24 آذر 1392, 16:28 عصر
سلام.
متد زیر یه هاش تیبل رو میگیره و بر اساس valueکه عددی هست اون رو sortمیکنه. اما کد اخر رو من متوجه نمیشم میشه لطفا توضیح بدید چیکار میکنه؟ منظورم نحوه استفاده از delegate هستش.


private string[] getKeysInValueOrder(Hashtable arrayToSort)
{
string[] keys = new string[arrayToSort.Count];
arrayToSort.Keys.CopyTo(keys, 0);

Array.Sort(keys, delegate(string x, string y)
{
return (arrayToSort[x].ToString() as IComparable).CompareTo(arrayToSort[y].ToString());
}
);

return keys;
}

دلتنگ اسمان
یک شنبه 24 آذر 1392, 20:24 عصر
از مهندسین محترم کسی نیست توضصیح بده.

abbas.oveissi
سه شنبه 26 آذر 1392, 05:36 صبح
از مهندسین محترم کسی نیست توضصیح بده.

سلام ، با استفاده از دلیگیت اومده به متد Sort نشون داده که معیار مقایسه برای مرتب سازی چی باشه.این قضیه زمانی خیلی خودشو نشون میده که مثلا ما یک لیست از کلاس Student داریم که یکی از خصوصیاتشون معدل هست.حالا ما میخوایم این لیست رو براساس معدل مرتب کنیم.میتونیم با استفاده از این روش به Sort بگیم معیار مقایسشو خصوصیت معدل بذاره و با بقیه خصوصیات کلاس کاری نداشته باشه.البته به جای دلیگیت میشه از Lambda Expression هم استفاده کرد مانند زیر :
private static void sortArray()
{
List<TestKlasse> liste = new List<TestKlasse>();
liste.Add(new TestKlasse() { X = 2, Y = 8 });
liste.Add(new TestKlasse() { X = 0, Y = 10 });
liste.Add(new TestKlasse() { X = 1, Y = 9 });
liste.Add(new TestKlasse() { X = 3, Y = 7 });
// with delegate
liste.Sort(delegate(TestKlasse a, TestKlasse b) { return a.Y.CompareTo(b.Y); });
liste.ForEach(delegate(TestKlasse tk){Console.WriteLine("X {0}, Y {1}",tk.X,tk.Y);});
// with lambda function
liste.Sort((a, b) => a.X.CompareTo(b.X));
liste.ForEach(delegate(TestKlasse tk) { Console.WriteLine("X {0}, Y {1}", tk.X, tk.Y); });
}