HomeSearch

C# List AddRange, InsertRange (Append Array to List)

Use the List AddRange and InsertRange methods. Append an int array to a List.
AddRange, InsertRange. AddRange adds an entire collection of elements. It can replace tedious foreach-loops that repeatedly call Add on List.ListForeach
We can pass any IEnumerable collection to AddRange, not just an array or another List. InsertRange() operates in a way similar to AddRange, but receives a starting offset position.
AddRange example. We look at the AddRange instance method from the base class library in the C# language on List. This example adds a range at the end of the List using the AddRange method.Int Array

Tip: The term "range" means an IEnumerable collection. Any type that implements IEnumerable can be used.

IEnumerable

Here: A new List is created, and 4 ints are added. An array of 3 elements of the same numeric type is initialized.

Finally: We call AddRange. The program displays 7 integers, which are the union of the List itself and the array we added with AddRange.

Console.WriteLine
C# program that uses AddRange using System; using System.Collections.Generic; class Program { static void Main() { var list = new List<int>(); list.Add(1); list.Add(2); list.Add(5); list.Add(6); // Contains: // 1 // 2 // 5 // 6 var array = new int[3]; array[0] = 7; array[1] = 6; array[2] = 7; list.AddRange(array); // Contains: // 1 // 2 // 5 // 6 // 7 [added] // 6 [added] // 7 [added] 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
InsertRange example. This method places a collection of elements into a certain index of a List. The List resizes to accommodate the inserted elements.

Info: InsertRange is related to the AddRange method, which allows you to add an array or other collection on the end of a List.

Note: InsertRange handles collections that implement IEnumerable. It inserts the IEnumerable in between existing elements, or at the start.

Main: The program populates a new List instance with 4 integral values. Next it creates an array with 3 more values.

Finally: The program inserts the array into the List at the second index. The List's ending contents are displayed.

C# program that uses InsertRange using System; using System.Collections.Generic; class Program { static void Main() { var list = new List<int>(); list.Add(1); list.Add(2); list.Add(5); list.Add(6); // Contains: // 1 // 2 // 5 // 6 var array = new int[3]; array[0] = 7; array[1] = 6; array[2] = 7; list.InsertRange(1, array); // Contains: // 1 // 7 [inserted] // 6 [inserted] // 7 [inserted] // 2 // 5 // 6 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
Internals. In the .NET Framework, InsertRange is implemented by using Array.Copy and the CopyTo instance method on arrays. The entire array inside the List will have to be copied.InsertRange Method: Microsoft Docs

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(...); }
Internals, AddRange. The AddRange method is implemented with InsertRange. AddRange is a wrapper method on top of InsertRange—the target position is 0.
Performance, overview. AddRange and InsertRange are internally the same method. We know from the compiled code above that the internal implementation normally calls Array.Copy or 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
Performance, Add. It may be faster to just use Add() instead of calling AddRange, even if we have an array. Using a foreach-loop and calling Add is faster in the linked benchmark.List Add
LinkedList. If you have a requirement for inserting elements often, LinkedList is faster, as you need to adjust only one reference. But test carefully before committing to LinkedList.LinkedList
A summary. AddRange appends a range of values to the end of a List. InsertRange places an array between the elements in a List. These 2 methods help with List range manipulations.Array
© 2007-2019 Sam Allen. Every person is special and unique. Send bug reports to info@dotnetperls.com.
Home
Dot Net Perls