عملگرهای تقسیم بندی Skip و SkipWhile
در این بخش از آموزش LINQ، عملگرهای تقسیم بندی را بررسی خواهیم کرد. عملگرهای تقسیم بندی یک مجموعه را به دو بخش تقسیم می کنند و یکی از آن ها را باز می گردانند.
متد Skip
متد Skip تعداد مشخصی از عناصر را از ابتدای مجموعه skip کرده و باقی عناصر را باز میگرداند. برای درک بهتر به مثال زیر توجه کنید:
1 2 3 4 | IList<string> strList = new List<string>(){ "One", "Two", "Three", "Four", "Five" }; var newList = strList.Skip(2); foreach(var str in newList) Console.WriteLine(str); |
خروجی مثال:
1 2 3 | Three Four Five |
متد SkipWhile
همانطور که از اسم متد نیز مشخص است، عناصر را تا زمانی که یک عنصر شرط مشخص شده را برآورده نکند skip می کند. اگر حتی اولین عنصر شرط مشخص شده را برآورده نکند، این متد 0 عنصر را skip می کند. یعنی همه عناصر را باز می گرداند. این متد دو overload دارد که اولی یک ورودی از نوع Func
برای درک بهتر به مثال زیر توجه کنید که در آن از شروع مجموعه تا اولین عنصری که طول آن 4 یا بیشتر از آن باشد عناصر skip می شوند.
1 2 3 4 5 6 7 8 9 10 11 | IList<string> strList = new List<string>() { "One", "Two", "Three", "Four", "Five", "Six" }; var resultList = strList.SkipWhile(s => s.Length < 4); foreach(string str in resultList) Console.WriteLine(str); |
خروجی مثال:
1 2 3 4 | Three Four Five Six |
در مثال فوق متد SkipWhile دو عنصر اول را به دلیل این که شرط مشخص شده را بر آورده نمی کنند skip می کند اما عنصر سوم شرط را برآورده می کند پس عملیات skip کردن متوقف می شود و مابقی عناصر شامل خود عنصر سوم بازگشت داده می شوند. در مثال زیر به دلیل این که اولین عنصر شرط مشخص شده را برآورده نمی کند، کل عناصر بازگشت داده می شوند:
1 2 3 4 5 6 7 8 9 10 11 | IList<string> strList = new List<string>() { "Three", "One", "Two", "Four", "Five", "Six" }; var resultList = strList.SkipWhile(s => s.Length < 4); foreach(string str in resultList) Console.WriteLine(str); |
خروجی مثال:
1 2 3 4 5 6 | Three One Two Four Five Six |
در مثال زیر از overload دوم متد SkipWhile استفاده کردیم که اندیس مربوط به هر عنصر را در اختیار ما قرار می دهد.
1 2 3 4 5 6 7 8 9 10 11 | IList<string> strList = new List<string>() { "One", "Two", "Three", "Four", "Five", "Six" }; var result = strList.SkipWhile((s, i) => s.Length > i); foreach(string str in result) Console.WriteLine(str); |
خروجی مثال:
1 2 | Five Six |
در مثال فوق شرط ما به این صورت است که گفتم تا زمانی که طول عنصر از مقدار اندیس خودش کمتر بود skip کن و چون عنصر 4 (شروع از صفر) طولش 4 است و شرط را برآورده می کند، عملیات متوقف شده و مابقی عناصر بازگشت داده می شوند.
هیچ نظری ثبت نشده است