使用Powershell使用.Add()问题填充ArrayList

问题描述 投票:0回答:2

我正在尝试为具有超过10,000个条目的数据数组的脚本增加性能,然后在foreach-object语句中使用它,通过调用另一个函数在ArrayList中填充新数据。我一直在阅读我不应该使用+ =的方法,这是我学到的方法,因为性能令人恐惧,因为它会撕毁数组并为每个项目重建它。我遇到的问题是我需要调用一个函数来填充一个空的ArrayList,但是我似乎无法在。Add()方法中做到这一点。

旧代码:

Function get_gfe
Function get_os

$gfe   =  [System.Collections.ArrayList]@()
$gfe   = get_gfe
$getos = [System.Collections.ArrayList]@()

$gfe | foreach { $getos     += get_os $_} 

这需要一个多小时才能用数据填充$ getos。我希望改用类似的方法,但是它不起作用,任何帮助将不胜感激

$gfe | foreach { [void]$getos.Add(get_os $_)} 

我知道您可以使用.Add($ _),但这不能满足我的需要,并且在.Add()方法内部找不到使用其他代码或调用函数的任何引用。

谢谢!

我正在尝试为具有超过10,000个条目的数据数组的脚本提高性能,然后在foreach-object语句中使用它,通过调用另一个...来用新数据填充空白ArrayList ...]] >>

为什么不将foreach循环扩展为类似这样的内容:

foreach ($entry in $gfe){
    $os = get_os $entry
    [void]$getos.add($os)
}
foreach管道到|的管道相比,[foreach-object回路还节省了时间。

尽管当然,由于我不知道您的函数实际上在做什么,所以这可能不是节省时间的最有效方法。您可以使用measure-command确定。

是否

绝对重要

$getos的类型为System.Collections.ArrayList而不是“普通”数组(System.Object [])?
如果没有,我认为下一个代码可以执行得更快:

$getos = foreach ($entry in $gfe) { get_os $entry # output the result of function get_os and collect in variable $getos }

arrays powershell
2个回答
1
投票

为什么不将foreach循环扩展为类似这样的内容:


0
投票
是否

绝对重要

$getos的类型为System.Collections.ArrayList而不是“普通”数组(System.Object [])?
© www.soinside.com 2019 - 2024. All rights reserved.