C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML
Step 1: A new List is created, and 4 ints are added. An array of 3 elements of the same numeric type is initialized.
ArrayStep 2: We call AddRange. The 3 values stored in the array are added to the end of the List.
Step 3: The program displays 7 integers, which are the union of the List itself and the array we added with AddRange.
ConsoleTip: The term "range" means an IEnumerable collection. Any type that implements IEnumerable can be used.
IEnumerableC# program that uses AddRange
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
// Step 1: create List and array.
var list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(5);
list.Add(6);
var array = new int[3];
array[0] = 7;
array[1] = 6;
array[2] = 7;
// Step 2: call AddRange.
list.AddRange(array);
// Step 3: display the List contents.
foreach (int value in list)
{
Console.WriteLine("VALUE: {0}", value);
}
}
}
Output
VALUE: 1
VALUE: 2
VALUE: 5
VALUE: 6
VALUE: 7
VALUE: 6
VALUE: 7
Step 1: The program populates a new List instance with 4 integral values. Next it creates an array with 3 more values.
Step 2: We invoke InsertRange. The program inserts the array into the List at the second index.
Step 3: We display the contents of the List, which has the contents of the array added at the second index.
C# program that uses InsertRange
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
// Step 1: create List and array.
var list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(5);
list.Add(6);
var array = new int[3];
array[0] = 7;
array[1] = 6;
array[2] = 7;
// Step 2: call InsertRange.
list.InsertRange(1, array);
// Step 3: display the elements.
foreach (int value in list)
{
Console.WriteLine("VALUE: {0}", value);
}
}
}
Output
VALUE: 1
VALUE: 7
VALUE: 6
VALUE: 7
VALUE: 2
VALUE: 5
VALUE: 6
Here: This example shows the internal code for InsertRange. If the new range fits in the allocated size, the new range is simply copied.
But: Sometimes 2 Array.Copy calls are needed: one for the elements before, and one for the elements after. A new array is allocated.
InsertRange method body: C#
this.EnsureCapacity(this._size + count);
if (index < this._size)
{
Array.Copy(...);
}
if (this == is2)
{
Array.Copy(...);
Array.Copy(...);
}
else
{
T[] array = new T[count];
is2.CopyTo(array, 0);
array.CopyTo(...);
}
Therefore: It is impossible for AddRange or InsertRange to perform better than a plain Array.Copy.
However: Array.Copy itself may perform better than manually copying elements in a loop.
Array.Copy