如何在PowerShell中动态向阵列添加元素?

Luc*_*kor 17 arrays powershell function dynamic

我还没有太多的PowerShell经验,我正在努力教自己.

我正在尝试为更大的项目提供一些概念代码证明.这里的主要目标是使用函数动态创建并向数组添加元素.

这是我的代码:

$testArray = @()
function addToArray($Item1)
{
    $testArray += $Item1
    "###"
}

$tempArray = "123", "321", "453"
$foldertest = "testFolder"

foreach($item in $tempArray)
{
    addToArray $item
}
"###"
Run Code Online (Sandbox Code Playgroud)

每次函数完成时,数组都变为空.请记住,我的大部分编程经验都来自Java,PHP,一些C和C++,仅举几例,如果我在PHP中这样做(当然调整语言语法),这本来可以正常工作.

Ang*_*ira 18

$testArray = [System.Collections.ArrayList]@()
$tempArray = "123", "321", "453"

foreach($item in $tempArray)
{
    $arrayID = $testArray.Add($item)
}
Run Code Online (Sandbox Code Playgroud)


Mic*_*ens 13

问题是范围之一; 在addToArray函数中,将行更改为:

$script:testArray += $Item1
Run Code Online (Sandbox Code Playgroud)

...存储到您期望的数组变量中.

  • 感谢您的帮助,这种方法对我有用. (2认同)
  • 请注意,此方法的缺点是它使用新项目创建整个现有数组的内存中副本.换句话说,它是O(2n)内存使用量.如果你这么做或者使用非常大的阵列,它会变得非常昂贵.使用ArrayList重用相同的对象并直接将项添加到其中. (2认同)

Jus*_*dow 5

注意:如果您想要动态(非固定)数量的项目,更精确的解决方案可能是使用List

$testArray = New-Object System.Collections.Generic.List[System.Object]

$tempArray = "123", "321", "453"

foreach($item in $tempArray)
{
    $testArray.Add($item)
}
Run Code Online (Sandbox Code Playgroud)

注意:在这种情况下,您可以从.Net获得 List 的强大功能,因此您可以轻松应用 linq、合并、拆分以及执行您在 .Net 中使用 List 执行的任何操作