首页 > 解决方案 > 如何组合字符串输入并动态生成数组?

问题描述

param([string]$roles,[string]$members)

假设我像这样在命令行上传递输入

PS> role1,role2,role3,role4 member1,member2,,,,member3,,member4

我期望的数组是:

$array = @(
    @('role1', 'member1,member2'),
    @('role2', ''),
    @('role3', 'member3'),
    @('role4', 'member4')
)

我知道将字符串转换为数组:

$roles = 'role1,role2,role3,role4' -split ','
$members = 'member1,member2,,,,member3,,member4' -split ',,'

现在我该如何组合$roles$members以便每个角色都与成员相关联?我将如何动态生成数组?

伪代码

$array = @()

($roles+$members) | %{
    $role = $_.roles
    if ($_.members) {
        $_.members -split ',,' | ForEach-Object { $array += $role $_ }
    } else {
        $array += $role 
    }
}

注意:我将成员拆分为每个双逗号的自己的索引,因为显然分号在命令行上不被接受,因为它们破坏了命令行,所以我必须使用双逗号作为分隔符

注意2:注意4个逗号:,,,,这表示role2没有要添加的成员,所以本质上它意味着在4个逗号之间没有输入该索引/项目(role2)的成员,即,,EMPTY, ,

标签: powershell

解决方案


您的参数格式相当奇怪,但这是一种方法:

$roles = 'role1,role2,role3,role4' -split ','
$members = 'member1,member2,,,,member3,,member4' -split ',,'

$result = @()
for ( $i = 0; $i -lt $roles.Count; $i++ ) {
  $result += ,@($roles[$i],$members[$i])
}

我建议重新设计脚本以使用标准 PowerShell 参数(工程努力是值得的,IMO)。


推荐阅读