Создайте хеш с несколькими значениями из 2 массивов в powershell

Я хочу создать хеш с несколькими значениями для каждого ключа из 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 элементов.

Что я делаю неправильно в приведенном выше коде?


person naren ch    schedule 19.12.2018    source источник


Ответы (1)


Используйте оператор по модулю (%), чтобы "обернуть" в конце любое значение, превышающее длину наименьшего массива:

$table = [ordered] @{}
for($i = 0; $i -lt $B.Count; $i++){
  $table[$A[$i % $A.Count]] += @($B[$i])
}
person Mathias R. Jessen    schedule 19.12.2018
comment
Конечно; хороший ответ. - person mklement0; 19.12.2018
comment
Спасибо за помощь, Матиас. Оно работало завораживающе. - person naren ch; 20.12.2018