在Powershell的列表中显示多个数组值

jdg4fx2g  于 2022-12-04  发布在  Shell
关注(0)|答案(2)|浏览(152)

我有多个数组,如下所示:

$arrayList1 = @()
$arrayList2 = @()

$arrayList1 += "james"
$arrayList1 += "henry"
$arrayList1 += "bob"

$arrayList2 += "scott"
$arrayList2 += "john"
$arrayList2 += "meera"
$arrayList2 += "lisa"
$arrayList2 += "joseph"

我想显示如下输出:
| 数组列表1|数组列表2|
| - -|- -|
| 詹姆斯|斯科特|
| 亨利|约翰|
| 摆锤|梅拉|
| | 丽莎|
| | 约瑟夫|
下面是我尝试的:

$output = @{}
$output.add('arrayList1',$arrayList)
$output.add('arrayList2',$arrayLis2)
[PSCustomObject]$output

$output

输出如下所示:
| 数组列表2|数组列表1|
| - -|- -|
| 我的天啊|亨利|

  • 注意:数组中的数据数量不同。*

有什么建议我可以得到它的顺序我想要的吗?
谢谢
桑吉耶夫

0yycz8jy

0yycz8jy1#

一个简洁的解决方案(注:假设至少一个数组为非空):

$arrayList1 = 'james', 'henry', 'bob'
$arrayList2 = 'scott', 'john', 'meera', 'lisa', 'joseph'

foreach ($i in 0..([Math]::Max($arrayList1.Count, $arrayList2.Count)-1)) {
  [pscustomobject] @{ arrayList1 = $arrayList1[$i]; arrayList2 = $arrayList2[$i] }
}

根据需要,上述结果如下:

arrayList1 arrayList2
---------- ----------
james      scott
henry      john
bob        meera
           lisa
           joseph

顺便说一句:在GitHub issue #14732中的提议(最终被拒绝)建议增强foreach语句,使并行枚举更加方便,大致如下:
foreach ($elemFromList1, $elemFromList2 in $arrayList1, $arrayList2) { ... }

nfs0ujit

nfs0ujit2#

请尝试以下操作:

$Boys = "Bob", "Noah", "Liam"
$Girls = "Olivia", "Sophia", "Charlotte", "Emma"

Function Fix-Arrays {
    Param(
        [Parameter(Mandatory=$True)]
        [string[]]$ArrayNames,
        [switch]$NoWarnings = $False
    )
    $ValidArrays,$ItemCounts = @(),@()
    $VariableLookup = @{}
    
    ForEach ($Array in $ArrayNames) {
        Try {
            $VariableData = Get-Variable -Name $Array -ErrorAction Stop
            $VariableLookup[$Array] = $VariableData.Value
            $ValidArrays += $Array
            $ItemCounts += ($VariableData.Value | Measure).Count
        }

        Catch {
            If (!$NoWarnings) {Write-Warning -Message "No variable found for [$Array]"}
        }
    }

    $MaxItemCount = ($ItemCounts | Measure -Maximum).Maximum
    $FinalArray = @()
    
    For ($Inc = 0; $Inc -lt $MaxItemCount; $Inc++) {
        $FinalObj = New-Object PsObject
        ForEach ($Item in $ValidArrays) {
            $FinalObj | Add-Member -MemberType NoteProperty -Name $Item -Value $VariableLookup[$Item][$Inc]
        }

        $FinalArray += $FinalObj
    }

    $FinalArray
}

Fix-Arrays -ArrayNames "Boys","Girls"

只需编辑Fix-Arrays(第41行)和上面的两个示例数组以满足您的需要。

相关问题