首页 > 解决方案 > 在powershell中创建具有来自2个数组的多个值的哈希

问题描述

我想为每个键创建一个包含多个值的哈希,来自 2 个大小不相等的数组 A 和 B。

$A = @('usr1','usr2', 'usr3', 'usr4')
$B = @('INC1','INC2','INC3','INC4','INC5','INC6')
$h = [ordered]@{}
for($i=0; $i -lt $B.Count; $i++)
{
    for($j=0;$j -lt $A.Count; $j++)
    {
        $h[$A[$j]] += @($B[$j])
    }
}

` 我得到的输出

Name                           Value                                           
----                           -----                                           
usr1                           {INC1, INC2, INC3, INC4...}                     
usr2                           {INC1, INC2, INC3, INC4...}                     
usr3                           {INC1, INC2, INC3, INC4...}                     
usr4                           {INC1, INC2, INC3, INC4...} 

期望的输出:

Name                           Value                                           
----                           -----                                           
usr1                           {INC1, INC5}                     
usr2                           {INC2, INC6}                     
usr3                           {INC3}           
usr4                           {INC4}

我需要以相同的方式将数组 B 中的项目分配给数组 A 成员。也就是说,$B应该将 的元素$A一个接一个地收集在以元素命名的哈希表条目中,直到没有更多$B的项目被留下。

我在上面的代码中做错了什么?

标签: powershelldata-partitioning

解决方案


使用模运算符 ( %) 在末尾“环绕”任何超过最小数组长度的值:

$table = [ordered] @{}
for($i = 0; $i -lt $B.Count; $i++){
  $table[$A[$i % $A.Count]] += @($B[$i])
}

推荐阅读