C# में List<T>.InsertRange() मेथड का उपयोग करके किसी सूची में निर्दिष्ट इंडेक्स पर एक साथ कई तत्व (किसी संग्रह से) डाले जा सकते हैं। यह Insert() को बार-बार कॉल करने से अधिक कुशल है।
उदाहरण
using System;
using System.Collections.Generic;
public class Demo
{
public static void Main()
{
// मूल सूची
List list = new List { 10, 20, 30, 40, 50 };
Console.WriteLine($"मूल सूची: [{string.Join(", ", list)}]");
// डालने के लिए तत्व (सरणी, सूची, या कोई IEnumerable)
int[] newElements = { 60, 70, 80, 90 };
// इंडेक्स 5 पर (अंत में) डालें
list.InsertRange(5, newElements);
Console.WriteLine($"InsertRange(5, newElements) के बाद:");
Console.WriteLine($" [{string.Join(", ", list)}]");
// मध्य में डालना
int[] moreElements = { 25, 35 };
list.InsertRange(2, moreElements); // इंडेक्स 2 पर (30 से पहले)
Console.WriteLine($"\nInsertRange(2, {{25, 35}}) के बाद:");
Console.WriteLine($" [{string.Join(", ", list)}]");
}
}
आउटपुट
मूल सूची: [10, 20, 30, 40, 50]
InsertRange(5, newElements) के बाद:
[10, 20, 30, 40, 50, 60, 70, 80, 90]
InsertRange(2, {25, 35}) के बाद:
[10, 20, 25, 35, 30, 40, 50, 60, 70, 80, 90]
InsertRange() सिंटैक्स
public void InsertRange(int index, IEnumerable collection);
| पैरामीटर | विवरण |
index | डालने की शुरुआती स्थिति (0-आधारित)। 0 = शुरुआत, Count = अंत |
collection | डालने वाले तत्वों का संग्रह (कोई भी IEnumerable<T>) |
विभिन्न संग्रह प्रकारों के साथ InsertRange
using System;
using System.Collections.Generic;
public class Demo
{
public static void Main()
{
List list = new List { "A", "B", "C" };
// 1. सरणी से
list.InsertRange(1, new[] { "X", "Y" });
Console.WriteLine($"सरणी से: [{string.Join(", ", list)}]");
// 2. दूसरी सूची से
list.InsertRange(3, new List { "P", "Q" });
Console.WriteLine($"सूची से: [{string.Join(", ", list)}]");
// 3. LINQ क्वेरी से
list.InsertRange(0, new[] { "M", "N" }.Where(s => s != "M"));
Console.WriteLine($"LINQ से: [{string.Join(", ", list)}]");
// 4. खाली संग्रह (कोई प्रभाव नहीं)
list.InsertRange(0, Array.Empty());
Console.WriteLine($"खाली संग्रह: [{string.Join(", ", list)}]");
}
}
आउटपुट
सरणी से: [A, X, Y, B, C]
सूची से: [A, X, Y, P, Q, B, C]
LINQ से: [N, A, X, Y, P, Q, B, C]
खाली संग्रह: [N, A, X, Y, P, Q, B, C]
InsertRange() बनाम अन्य दृष्टिकोण
| मेथड | उपयोग केस | प्रदर्शन |
Insert(index, item) | एकल तत्व डालना | O(n) प्रति कॉल |
InsertRange(index, collection) | एकाधिक तत्व एक साथ डालना | O(n + m) कुल, बेहतर |
AddRange(collection) | अंत में जोड़ना | O(m) - सबसे तेज |
list = list.Concat(...).ToList() | LINQ दृष्टिकोण (नई सूची बनाता है) | O(n + m) - अधिक मेमोरी |
प्रदर्शन तुलना
using System;
using System.Collections.Generic;
using System.Diagnostics;
public class Demo
{
public static void Main()
{
int count = 10000;
int insertCount = 1000;
int[] toInsert = new int[insertCount];
// Insert() लूप
var list1 = new List(count);
for (int i = 0; i < count; i++) list1.Add(i);
var sw = Stopwatch.StartNew();
for (int i = 0; i < insertCount; i++)
list1.Insert(count / 2, toInsert[i]);
Console.WriteLine($"Insert() लूप: {sw.ElapsedMilliseconds} ms");
// InsertRange()
var list2 = new List(count);
for (int i = 0; i < count; i++) list2.Add(i);
sw.Restart();
list2.InsertRange(count / 2, toInsert);
Console.WriteLine($"InsertRange(): {sw.ElapsedMilliseconds} ms");
}
}
महत्वपूर्ण बिंदु
InsertRange() मौजूदा तत्वों को दाईं ओर शिफ्ट करता है
- इंडेक्स
Count के बराबर होने पर अंत में जोड़ता है (AddRange के समान)
- इंडेक्स
0 होने पर शुरुआत में जोड़ता है
- संग्रह null नहीं होना चाहिए (पर खाली हो सकता है)
- क्षमता (Capacity) स्वचालित रूप से बढ़ जाती है यदि आवश्यक हो
- बड़े सम्मिलन के लिए
InsertRange लूप से काफी तेज है