عملگرهای مرتب سازی Ordering Operators
این عملگرها عناصر توالی ورودی را به خروجی ارسال میکنند؛ با این تفاوت که توالی خروجی مرتب شده، توالی ورودی است.
عملگر OrderBy
این عملگر توالی ورودی را بر اساس کلیدی که مشخص میکنیم مرتب میکند.
مثال:
در این مثال کلید معرفی شدهی توسط عبارت Lambda، یک رشته است.
string[] ingredients = { "Sugar", "Egg", "Milk", "Flour", "Butter" }; var query = ingredients.OrderBy(x => x); foreach (var item in query) { Console.WriteLine(item); }
Butter Egg Flour Milk Sugar
عبارت Lambda استفاده شده میتواند یک خاصیت از عناصر تشکیل دهندهی توالی ورودی باشد.
مثال:
Ingredient[] ingredients = { new Ingredient {Name = "Sugar", Calories = 500}, new Ingredient {Name = "Egg", Calories = 100}, new Ingredient {Name = "Milk", Calories = 150}, new Ingredient {Name = "Flour", Calories = 50}, new Ingredient {Name = "Butter", Calories = 200}, }; var query = ingredients.OrderBy(x => x.Calories); foreach (var item in query) { Console.WriteLine(item.Name + " " + item.Calories); }
Flour 50 Egg 100 Milk 150 Butter 200 Sugar 500
پیاده سازی توسط عبارتهای جستجو
در عبارتهای پرس و جو، کلمه کلیدی orderby برای مرتب سازی توالی استفاده میشود:
مثال:
var query = from i in ingredients orderby i.Calories select i;
عملگر ThenBy
این عملگر میتواند به صورت زنجیرهای، یک یا چندین بار بعد از عملگر OrderBy در پرس و جو، مورد استفاده قرار گیرد. توسط عملگر ThenBy میتوان سطوح دیگری از مرتب سازی را اعمال کرد. در مثال زیر ابتدا توالی ورودی را بر اساس کالری و بعد از آن بر اساس نام مرتب خواهیم کرد.
مثال :
Ingredient[] ingredients = { new Ingredient {Name = "Sugar", Calories = 500}, new Ingredient {Name = "Milk", Calories = 100}, new Ingredient {Name = "Egg", Calories = 100}, new Ingredient {Name = "Flour", Calories = 500}, new Ingredient {Name = "Butter", Calories = 200}, }; var query = ingredients .OrderBy(x => x.Calories) .ThenBy(x => x.Name); foreach (var item in query) { Console.WriteLine(item.Name + " " + item.Calories); }
Egg 100 Milk 100 Butter 200 Flour 500 Sugar 500
پیاده سازی توسط عبارتهای جستجو
var query = from i in ingredients orderby i.Calories, i.Name select i;
عملگر OrderByDescending
این عملگر همچون عملگر OrderBy عمل میکند؛ اما توالی ورودی را بر اساس کلید داده شده، به صورت نزولی مرتب میکند.
مثال:
Ingredient[] ingredients = { new Ingredient {Name = "Sugar", Calories = 500}, new Ingredient {Name = "Egg", Calories = 100}, new Ingredient {Name = "Milk", Calories = 150}, new Ingredient {Name = "Flour", Calories = 50}, new Ingredient {Name = "Butter", Calories = 200}, }; var query = ingredients.OrderByDescending(x => x.Calories); foreach (var item in query) { Console.WriteLine(item.Name + " " + item.Calories); }
Sugar 500 Flour 500 Butter 200 Milk 100 Egg 100
پیاده سازی توسط عبارتهای جستجو
جایگزین عملگر OrderByDescending در عبارتهای جستجو، کلمهی کلیدی descending میباشد:
var query = from i in ingredients orderby i.Calories descending select i;
عملگر ThenByDescending
این عملگر بصورت زنجیرهای بعد از عملگرهای دیگر میآید و مرتب سازی را بهصورت نزولی انجام میدهد.
مثال:
Ingredient[] ingredients = { new Ingredient {Name = "Flour", Calories = 500}, new Ingredient {Name = "Sugar", Calories = 500}, new Ingredient {Name = "Egg", Calories = 100}, new Ingredient {Name = "Milk", Calories = 100}, new Ingredient {Name = "Butter", Calories = 200} }; var query = ingredients .OrderBy(x => x.Calories) .ThenByDescending(x => x.Name); foreach (var item in query) { Console.WriteLine(item.Name + " " + item.Calories); }
Milk 100 Egg 100 Butter 200 Sugar 500 Flour 500
پیاده سازی توسط عبارتهای جستجو
در عبارتهای جستجو نیز برای رسیدن به خروجی مشابه کد بالا از کلمهی کلیدی descending استفاده میکنیم.
var query = from i in ingredients orderby i.Calories, i.Name descending select i;
عملگر Reverse
عملگر Reveres توالی ورودی را دریافت کرده و آن را معکوس و سپس توالی خروجی را تولید میکند. اولین عنصر توالی ورودی، آخرین عنصر توالی خروجی میباشد.
مثال:
char[] letters = { 'A', 'B', 'C' }; var query = letters.Reverse(); foreach (var item in query) { Console.WriteLine(item); }
C B A
پیاده سازی توسط عبارتهای جستجو
معادل این عملگر، کلمهی کلیدی دیگری در عبارتهای جستجو وجود ندارد و ترکیب دو روش میتواند خروجی دلخواه را تولید کند.
عملگرهای گروه بندی Grouping Operator
عملگر GroupBy
Ingredient[] ingredients = { new Ingredient {Name = "Sugar", Calories = 500}, new Ingredient {Name = "Lard", Calories = 500}, new Ingredient {Name = "Butter", Calories = 500}, new Ingredient {Name = "Egg", Calories = 100}, new Ingredient {Name = "Milk", Calories = 100}, new Ingredient {Name = "Flour", Calories = 50}, new Ingredient {Name = "Oats", Calories = 50} }; IEnumerable<IGrouping<int, Ingredient>> query = ingredients.GroupBy(x => x.Calories); foreach (IGrouping<int, Ingredient> group in query) { Console.WriteLine("Ingredients with {0} calories", group.Key); foreach (Ingredient ingredient in group) { Console.WriteLine(" -{0}", ingredient.Name); } }
خروجی مثال بالا:
Ingredients with 500 calories -Sugar -Lard -Butter Ingredients with 100 calories -Egg -Milk Ingredients with 50 calories -Flour -Oats
پیاده سازی توسط عبارتهای جستجو
در بخش پنجم این سری آموزشی، روش گروه بندی توسط عبارتهای جستجو توضیح داده شده است.
عملگرهای مجموعه Set Operators
این عملگرها شامل موارد زیر میباشند:
• Concat
• Union
• Distinct
• Intersect
• Except
عملگر Concat
این عملگر دو توالی را با هم ادغام میکند؛ بطوریکه عناصر توالی دوم، بعد از عناصر توالی اول به توالی خروجی اضافه میشوند.
مثال:
string[] applePie = { "Apple", "Sugar", "Pastry", "Cinnamon" }; string[] cherryPie = { "Cherry", "Sugar", "Pastry", "Kirsch" }; IEnumerable<string> query = applePie.Concat(cherryPie); foreach (string item in query) { Console.WriteLine(item); }
Apple Sugar Pastry Cinnamon Cherry Sugar Pastry Kirsch
پیاده سازی توسط عبارتهای جستجو
معادل این عملگر، کلمهی کلیدی جدیدی در عبارتهای جستجو وجود ندارد و ترکیب دو روش میتواند خروجی دلخواه را تولید کند.
عملگر Union
این عملگر همچون عملگر Concat رفتار میکند؛ با این تفاوت که عناصر تکراری در توالی خروجی حضور نخواهند داشت.
مثال:
string[] applePie = { "Apple", "Sugar", "Pastry", "Cinnamon" }; string[] cherryPie = { "Cherry", "Sugar", "Pastry", "Kirsch" }; IEnumerable<string> query = applePie.Union(cherryPie); foreach (string item in query) { Console.WriteLine(item); }
Apple Sugar Pastry Cinnamon Cherry Kirsch
پیاده سازی توسط عبارتهای جستجو
معادل این عملگر، کلمهی کلیدی جدیدی در عبارتهای جستجو وجود ندارد و ترکیب دو روش میتواند خروجی دلخواه را تولید کند.
عملگر Distinct
این عملگر عناصر تکراری توالی را حذف میکند. این عملگر هم میتواند بر روی یک توالی اجرا شود و هم میتواند بصورت زنجیرهای بعد از عملگرهای دیگر بکار برود.
مثال: استفاده از این عملگر بر روی یک توالی:
string[] applePie = { "Apple", "Sugar", "Apple", "Sugar", "Pastry", "Cinnamon" }; IEnumerable<string> query = applePie.Distinct(); foreach (string item in query) { Console.WriteLine(item); }
خروجی مثال بالا:
Apple Sugar Pastry Cinnamon
مثال: بکارگیری عملگر Distinct بهمراه عملگر Concat برای شبیه سازی عملیات Union
string[] applePie = { "Apple", "Sugar", "Pastry", "Cinnamon" }; string[] cherryPie = { "Cherry", "Sugar", "Pastry", "Kirsch" }; IEnumerable<string> query = applePie.Concat(cherryPie).Distinct(); foreach (string item in query) { Console.WriteLine(item); }
Apple Sugar Pastry Cinnamon Cherry Kirsch
پیاده سازی توسط عبارتهای جستجو
معادل این عملگر، کلمهی کلیدی جدیدی در عبارتهای جستجو وجود ندارد و ترکیب دو روش میتواند خروجی دلخواه را تولید کند.
عملگر Intersect
این عملگر عناصر مشترک بین دو توالی را باز میگرداند.
مثال:
string[] applePie = { "Apple", "Sugar", "Pastry", "Cinnamon" }; string[] cherryPie = { "Cherry", "Sugar", "Pastry", "Kirsch" }; IEnumerable<string> query = applePie.Intersect(cherryPie); foreach (string item in query) { Console.WriteLine(item); }
Sugar Pastry
پیاده سازی توسط عبارتهای جستجو
معادل این عملگر، کلمهی کلیدی جدیدی در عبارتهای جستجو وجود ندارد و ترکیب دو روش میتواند خروجی دلخواه را تولید کند.
عملگر Except
این عملگر عناصری از توالی اول را انتخاب میکند که در توالی دوم همتایی نداشته باشند.
مثال:
string[] applePie = { "Apple", "Sugar", "Pastry", "Cinnamon" }; string[] cherryPie = { "Cherry", "Sugar", "Pastry", "Kirsch" }; IEnumerable<string> query = applePie.Except(cherryPie); foreach (string item in query) { Console.WriteLine(item); }
Apple Cinnamon
پیاده سازی توسط عبارتهای جستجو
معادل این عملگر، کلمهی کلیدی جدیدی در عبارتهای جستجو وجود ندارد و ترکیب دو روش میتواند خروجی دلخواه را تولید کند.