我在PowerShell数组中发现了一些有趣的行为,即如果我将一个数组声明为:
$array = @()
然后尝试使用$array.Add("item")
方法向其中添加项,我收到以下错误:
使用"1“参数调用"Add”时发生
异常:“集合大小固定。”
但是,如果我使用$array += "item"
附加项目,项目会被毫无问题地接受,并且“固定大小”限制似乎不适用。
为什么会这样呢?
发布于 2013-01-31 15:19:12
在使用$array.Add()
-method时,您尝试将元素添加到现有数组中。数组是一个固定大小的集合,因此您将收到一个错误,因为它不能被扩展。
$array += $element
使用与旧数组相同的元素+新项创建一个新数组,并且这个新的更大的数组将替换$array
-variable中的旧数组
可以使用+=运算符将元素添加到数组中。当你使用它时,Windows PowerShell实际上会用原始数组的值和附加值创建一个新的数组。例如,要在$a变量中将值为200的元素添加到数组中,请键入:
$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
(参见另一个答案)。
发布于 2015-10-16 02:48:48
如果你想要一个动态大小的数组,那么你应该做一个列表。您不仅可以获得.Add()
功能,而且正如@frode-f所解释的那样,动态数组的内存效率更高,而且也是一种更好的实践。
而且它使用起来非常简单。
尝试下面的代码,而不是数组声明:
$outItems = New-Object System.Collections.Generic.List[System.Object]
添加项目很简单。
$outItems.Add(1)
$outItems.Add("hi")
如果你真的想要一个数组,当你完成时,也有一个函数。
$outItems.ToArray()
发布于 2019-11-05 04:52:54
要在不使用低效+=
的情况下创建数组,最常见的习惯用法是从循环的输出中创建数组:
$array = foreach($i in 1..10) {
$i
}
$array
[collections.arraylist]$array = 1..10
$array.add(11) > $null
https://stackoverflow.com/questions/14620290
复制相似问题