यह आर्टिकल
Take और Skip ऑपरेटर्स का अवलोकन
- Take(n): सीक्वेंस के पहले
nएलिमेंट्स लौटाता है - Skip(n): सीक्वेंस के पहले
nएलिमेंट्स को छोड़कर शेष लौटाता है
उदाहरण 1: Skip ऑपरेटर
class Program {
static void Main(string[] args) {
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 5, 6, 7, 7, 8, 8 };
System.Console.WriteLine($"Total count: {numbers.Count()}"); // 28
var skipRes = numbers.Skip(5);
System.Console.WriteLine($"After Skip(5): {skipRes.Count()}"); // 23
Console.ReadLine();
}
}
उदाहरण 2: Take ऑपरेटर
class Program {
static void Main(string[] args) {
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 5, 6, 7, 7, 8, 8 };
System.Console.WriteLine($"Total count: {numbers.Count()}"); // 28
var takeRes = numbers.Take(5);
System.Console.WriteLine($"After Take(5): {takeRes.Count()}"); // 5
Console.ReadLine();
}
}
उदाहरण 3: Skip और Take संयुक्त (पेजिनेशन पैटर्न)
class Program {
static void Main(string[] args) {
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 5, 6, 7, 7, 8, 8 };
System.Console.WriteLine($"Total count: {numbers.Count()}"); // 28
// पहले 10 छोड़ें, अगले 18 लें
var takeSkipRes = numbers.Skip(10).Take(18);
System.Console.WriteLine($"Skip(10).Take(18): {takeSkipRes.Count()}"); // 18
Console.ReadLine();
}
}
आउटपुट
Total count: 28
After Skip(5): 23
After Take(5): 5
Skip(10).Take(18): 18
व्यावहारिक पेजिनेशन हेल्पर
public static class PaginationExtensions {
public static IEnumerable<T> GetPage<T>(
this IEnumerable<T> source,
int pageNumber,
int pageSize)
{
if (pageNumber < 1) throw new ArgumentOutOfRangeException(nameof(pageNumber));
if (pageSize < 1) throw new ArgumentOutOfRangeException(nameof(pageSize));
return source.Skip((pageNumber - 1) * pageSize).Take(pageSize);
}
}
// उपयोग
var page3 = allItems.GetPage(3, 20); // पेज 3, 20 आइटम्स प्रति पेज
एज केस व्यवहार
| स्थिति | Skip व्यवहार | Take व्यवहार |
|---|---|---|
| काउंट से अधिक n | खाली सीक्वेंस | सभी उपलब्ध एलिमेंट्स |
| n = 0 | सभी एलिमेंट्स | खाली सीक्वेंस |
| n < 0 | ArgumentOutOfRangeException | ArgumentOutOfRangeException |
| खाली सोर्स | खाली सीक्वेंस | खाली सीक्वेंस |
पेरफॉरमेंस नोट्स
- LINQ to Objects: Skip को n एलिमेंट्स इटरेट करने पड़ते हैं → O(n)
- LINQ to SQL/EF Core: SQL
OFFSET/FETCHमें ट्रांसलेट होता है → सर्वर-साइड पेजिनेशन - बड़े ऑफसेट्स के लिए: कर्सर-आधारित पेजिनेशन (Seek पद्धति) बेहतर पेरफॉरमेंस देती है
संबंधित ऑपरेटर्स
SkipWhile(predicate)- कंडीशन सत्य होने तक छोड़ेंTakeWhile(predicate)- कंडीशन सत्य होने तक लेंSkipLast(n)/TakeLast(n)- अंत से (C# 8.0+ / .NET Core 3.0+)