如何在PowerShell中向数组前添加元素?

33

PowerShell 代码:

$list += "aa"

向列表 $list 追加元素 "aa"。有没有一种方法可以在前面添加一个元素?这是我的解决方案,但肯定有一种方法可以用单行代码实现。

向列表 $list 前面添加元素的方法是什么?以下是我的解决方案,但一定有更简洁的方法。

$tmp = ,"aa";
$tmp += $list
$list = $tmp
4个回答

43
在你上面的例子中,你只需要做以下操作:
$list = ,"aa" + $list

这将简单地将“aa”添加到列表的开头,并使其成为第0个元素。通过获取$list[0]来验证。


2
从技术上讲,这将两个数组合并。该数组大小固定,因此无法进行纯前置操作。 - Shaun Luttin

22

这将两个数组合并成一个。

$list = @("aa") + $list

由于 PowerShell 数组的长度是固定的,因此无法进行纯粹的数组前置操作。将两个数组合并成一个是一个不错的方法。


2
我喜欢这个答案,它易读,意图非常清晰! - ruizpauker

18

在PowerShell中,对数组使用+=+会在每次使用时复制一份数组。除非列表/数组真的很大,否则这没问题。在这种情况下,考虑使用通用列表:

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

请注意,在这种情况下,您需要使用Add/Insert方法。如果您退回使用+=,它会将通用列表复制回一个object[]


注意,你的第一个$list将返回一个包含2个元素的数组。第一个元素是'aa',第二个元素是一个嵌套的列表,其中包含2个元素'a'和'b'。 - Nestor
我不确定为什么这个答案没有得到足够的投票。对于像日志处理这样的事情,这将胜过简单的串联。 - Tanveer Badar

1
如果你想对一个“对象”数组而不是一个“字符串”进行此操作,我发现以下内容很有用:
$List = $List | foreach {'aa' + $_}

显然,对于一个巨大的数组来说,这将会相对缓慢。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接