получить значение массива вместо индекса - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь получить массив, и в конце я хочу поместить их все в виде списка в хеш, но я получаю только индекс, а не список значений.

$testArray = [System.Collections.ArrayList]@()
$tempArray = "123", "321", "453"
foreach($item in $tempArray) {
    if ($item -notlike 123) {
        $arrayID = $testArray.Add($item);
    }
}

@{"mailboxes" = $arrayID};

В результате я хотел бы видеть такие значения, как

mailboxes {321, 453}

вместо индекса, как показано ниже.

mailboxes 1

Ответы [ 2 ]

2 голосов
/ 10 июля 2019

Метод ArrayList.Add() возвращает индекс нового элемента массива, поэтому вы просто добавляете целое число к $arrayID. Вместо этого:

$testArray = [System.Collections.ArrayList]@()
$tempArray = "123", "321", "453"
foreach($item in $tempArray) {
    if ($item -notlike 123) {
        $testArray.Add($item);
    }
}
@{ "mailboxes" = $testArray};

возвращается:

mailboxes                      {321, 453}
0 голосов
/ 10 июля 2019

если вы закончите, цель состоит в том, чтобы получить это

mailboxes {321, 453}

тогда вы могли бы сделать это

$OldArray = @("123", "321", "453")

[System.Collections.ArrayList]$NewArray = @()

foreach($item in $OldArray) {
    if ($item -ne 123) {
        $NewArray += item 
    }
}

@{"mailboxes" = $NewArray};

или только это ...

@{"mailboxes" =  @("123", "321", "453") | ? {$_ -ne 123}};

примечание: @() по умолчанию создает [system.array] фиксированного размера. использование += для [system.array] приведет к созданию нового массива, и в него необходимо будет скопировать содержимое старого массива. [System.Collections.ArrayList] имеют динамический размер, они позволяют легко добавлять новые элементы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...