繁体   English   中英

数组列表和高级功能

[英]ArrayLists and Advanced Functions

我有一个字符串ArrayLists的ArrayList,需要使用高级函数进行处理。 我正在根据“在一个月的午餐中学习Powershell工具制作”中学到的知识对该功能进行建模。

为了使功能灵活,他们在那本书中告诉您进行设置,以便可以通过管道传递参数,但也可以将其视为数组。 因此,基本上,您使高级函数接受特定参数的ValuesFromPipeline ,但随后还使该参数键入数组,并在Process中添加一个ForEach-Object

我遇到的问题是,如果我以这种方式配置函数,它将无法再通过管道传递值。因为这样一来,它将一次对待它们,并且ForEach-Object将ArrayList分解为后续字符串进行处理。 有防止这种情况的简便方法吗?

请参见下面的代码示例。 当我将$OutsideArray作为常规参数( Get-Data $OutsideArray )传递给Get-Data ,它可以工作。 当我在函数中删除ForEach-Object时,它起作用了。 但是当我按原样管道$OutsideArray时,它不再起作用。

尝试逐步查看是否可以理解为什么这样做,但到目前为止还没有运气。

function Get-Data {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $True, ValueFromPipeline = $True)]
        [System.Collections.ArrayList]$ModuleBlocks
    )

    PROCESS {
        $ModuleBlocks | % {
            $test = $_
        }
    }
}

$OutsideArray = New-Object System.Collections.ArrayList

For ($i = 0; $i -lt 10; $i++) {

    $InsideArray = New-Object System.Collections.ArrayList

    For ($j = 0; $j -le 10; $j++) {
        $InsideArray.Add("$i This is a test $j") | Out-Null
    }

    $OutsideArray.Add($InsideArray) | Out-Null
}

$OutsideArray | Get-Data

ValueFromPipelineByPropertyName怎么样? 您可以通过管道将arraylist作为另一个对象的属性。 我在这里发布了类似的答案(未评分): 将数组列表从第一个脚本添加到第二个脚本

编辑:我想到了第二种方式。 使用逗号运算符将其传递:

$a = [collections.arraylist](1,2,3)
,$a | foreach gettype

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     ArrayList                                System.Object

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM