mal*_*gca 162 arrays powershell
我在PowerShell Arrays中发现了一些有趣的行为,即如果我将数组声明为:
$array = @()
Run Code Online (Sandbox Code Playgroud)
然后尝试使用该$array.Add("item")方法向其添加项目,我收到以下错误:
使用"1"参数调用"Add"的异常:"Collection具有固定大小."
但是,如果我使用附加项目$array += "item",则会毫无问题地接受该项目,并且"固定大小"限制似乎不适用.
为什么是这样?
Fro*_* F. 231
使用$array.Add()-method时,您尝试将元素添加到现有数组中.数组是固定大小的集合,因此您将收到错误,因为它无法扩展.
$array += $element创建一个新元素,其元素与旧元素+新元素相同,这个新的大型数组替换$array-variable中的旧数组
您可以使用+ =运算符将元素添加到数组中.使用它时,Windows PowerShell实际上会创建一个新数组,其中包含原始数组的值和添加的值.例如,要向$ a变量中的数组添加值为200的元素,请键入:
Run Code Online (Sandbox Code Playgroud)$a += 200
来源:about_Arrays
+= 是一个昂贵的操作,所以当你需要添加很多项目时,你应该尝试尽可能少地添加它们,例如:
$arr = 1..3 #Array
$arr += (4..5) #Combine with another array in a single write-operation
$arr.Count
5
Run Code Online (Sandbox Code Playgroud)
如果那是不可能的,请考虑使用更有效的集合,List或者ArrayList(参见其他答案).
小智 104
如果你想要一个动态大小的数组,那么你应该创建一个列表.你不仅会获得.Add()功能,而且正如@ frode-f所解释的那样,无论如何它的内存效率更高,更好.
而且它很容易使用.
而不是你的数组声明,试试这个:
$outItems = New-Object System.Collections.Generic.List[System.Object]
Run Code Online (Sandbox Code Playgroud)
添加项目很简单.
$outItems.Add(1)
$outItems.Add("hi")
Run Code Online (Sandbox Code Playgroud)
如果你在完成时真的想要一个数组,那么它也有一个功能.
$outItems.ToArray()
Run Code Online (Sandbox Code Playgroud)
在不使用低效的情况下创建数组的最常见习惯用法+=是这样的,来自循环的输出:
$array = foreach($i in 1..10) {
$i
}
$array
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
312498 次 |
| 最近记录: |