Answers:
使用$array.Add()
-method时,您尝试将元素添加到现有数组中。数组是固定大小的集合,因此您将收到一个错误消息,因为它无法扩展。
$array += $element
创建一个具有与旧元素+新项目相同的元素的新数组,而这个新的较大数组替换$array
-variable中的旧元素
您可以使用+ =运算符将元素添加到数组。使用Windows PowerShell时,它实际上使用原始数组的值和添加的值创建一个新数组。例如,要将值200的元素添加到$ a变量的数组中,请输入:
$a += 200
资料来源:about_Arrays
+=
这是一项昂贵的操作,因此当您需要添加许多项目时,应尝试以尽可能少的操作添加它们,例如:
$arr = 1..3 #Array
$arr += (4..5) #Combine with another array in a single write-operation
$arr.Count
5
如果不可能,请考虑使用效率更高的集合,例如List
或ArrayList
(请参见其他答案)。
List
或ArrayList
。他们会更快。我个人使用+=
和排列99%的时间,因为我通常会创建简短的一次性脚本,而多余的秒数并不重要。对于具有大量添加/删除操作的大型脚本,我想在其中进行优化并节省时间,请使用List
或ArrayList
。
Add()
存在该方法吗?
IList
。尝试Get-Member -InputObject @()
将显示此内容Add Method int IList.Add(System.Object value)
如果要动态调整大小的数组,则应列出一个列表。您不仅将获得.Add()
功能,而且正如@ frode-f所解释的,动态数组无论如何都具有更高的内存效率和更好的实践。
而且非常容易使用。
代替您的数组声明,请尝试以下操作:
$outItems = New-Object System.Collections.Generic.List[System.Object]
添加项目很简单。
$outItems.Add(1)
$outItems.Add("hi")
而且,如果您在完成时确实想要一个数组,那么也有一个函数。
$outItems.ToArray()
Add()
功能?我可以确认,如果您List
如上所述创建通用对象,那么您将拥有一个可变列表,可以使用Add()
和Remove()
方法分别为其添加和删除项。
(New-Object System.Collections.Generic.List[string]).GetType().Name
产量List`1
对我来说,符合市场预期; 也许您将其应用于+=
包含列表的变量(而不是调用.Add()
方法),在这种情况下,变量值确实会转换为数组(System.Object[]
)。
$a = new-object collections.generic.list[object]