How to prepend an element to an array in Powershell?
Solution 1
In your example above, you should just be able to do:
$list = ,"aa" + $list
That will simply prepend "aa" to the list and make it the 0th element. Verify by getting $list[0]
.
Solution 2
Using +=
and +
on arrays in PowerShell is making a copy of the array every time you use it. That is fine unless the list/array is really large. In that case, consider using a generic list:
C:\> $list = new-object 'System.Collections.Generic.List[string]'
C:\> $list.Add('a')
C:\> $list.Add('b')
C:\> $list.Insert(0,'aa')
C:\> $list
aa
a
b
Note that in this scenario you need to use the Add/Insert methods. If you fall back to using +=
, it will copy the generic list back to an object[]
.
Solution 3
This combines two arrays into one.
$list = @("aa") + $list
It's impossible to do a pure prepending into a PowerShell array, because PowerShell arrays are fixed length. Combining two arrays into one is a good approach.
Solution 4
If you happen to want to do this to an 'Object' array rather than a 'String', I found the following useful:
$List = $List | foreach {'aa' + $_}
Obviously, this would be relatively slow for a gigantic array.

Nestor
Systems Engineer, with a Masters in Computational Finance from Carnegie Mellon University. Writing software is one of the pleasures of life!
Updated on April 16, 2020Comments
-
Nestor over 2 years
The Powershell code:
$list += "aa"
appends the element "aa" to the list $list. Is there a way to prepend an element? This is my solution, but there must be a way to do this in a single line.
$tmp = ,"aa"; $tmp += $list $list = $tmp