gpt4 book ai didi

powershell - 在powershell中创建一个初始大小较大的数组

转载 作者:行者123 更新时间:2023-12-04 13:07:57 31 4
gpt4 key购买 nike

我知道在 powershell 中创建数组的唯一方法是
$arr = @(1, 2, 3)
但是,如果我想创建一个初始大小较大的数组(例如 10000),这种创建方法并不方便。

因为我不想写这样的代码
$arr = @(0, 0, 0, 0, 0, 0, ... ,0) # 10000 0s in this line of code
编写如下代码效率不高。

$arr = @()
for ($i = 1; $i -le 10000; $i++) {
$arr += 0
}

因为每当 +=运算符执行后,旧数组中的所有元素将被复制到新创建的数组中。

在powershell中创建具有大初始大小的数组的最佳方法是什么?

最佳答案

使用 New-Object在这种情况下:

PS> $arr = New-Object int[] 10000; $arr.length
10000

或者,在 PSv5+ 中,使用静态 new()类型的方法:
PS> $arr = [int[]]::new(10000); $arr.length
10000

这些命令创建一个 强类型数组 , 使用基类型 [int]在这个例子中。
如果用例允许,出于性能和类型安全的原因,这是更可取的。

如果您需要 创建一个“无类型”数组 与 PowerShell 相同( [System.Object[]] ),替换 objectint ;例如, [object[]]::new(10000) ;这样一个数组的元素将默认为 $null .
TessellatingHeckler's helpful answer ,然而,显示了很多 更简洁甚至允许您的替代方案 将所有元素初始化为特定值 .

数组有固定大小;如果您 需要一个类似数组的数据结构,您可以预先分配和动态增长 ,见 Bluecakes' helpful [System.Collections.ArrayList] -based answer .

[System.Collections.ArrayList] 是对 [System.Object[]] 的可调整大小的模拟,及其 通用等效 - 喜欢 [int[]]上面的例子 - 允许您 使用特定类型 对于性能和稳健性(如果可行),是 [System.Collections.Generic.List[<type>]] ,例如:
PS> $lst = [System.Collections.Generic.List[int]]::New(10000); $lst.Capacity
10000

请注意 - 与 [System.Collections.ArrayList] 一样- 指定初始容量( 10000 ,这里)不会立即分配具有该大小的内部使用的数组 - 容量值只是存储(并公开为属性 .Capacity ),以及具有该容量的内部数组(内部留有增长空间的大小)在第一个元素添加到列表时按需分配。
[System.Collections.Generic.List[<type>]].Add()值得称赞的是,方法不会产生输出,而 [System.Collections.ArrayList] 's do(它返回刚刚添加的元素的索引)。
PS> $al = [System.Collections.ArrayList]::new(); $al.Add('first elem')
0 # .Add() outputs the index of the newly added item
# Simplest way to suppress this output:
PS> $null = $al.Add('first elem')
# NO output.

PS> $gl = [System.Collections.Generic.List[string]]::new(); $gl.Add('first elem')
# NO output from .Add()

关于powershell - 在powershell中创建一个初始大小较大的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43083051/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com