Итерация по неровному массиву - PullRequest
0 голосов
/ 09 ноября 2018

Я изучаю Powershell Scripting и сейчас пытаюсь перебрать массив, состоящий из 2 массивов значений, при этом выводя только первое значение.

Например, возьмите приведенный ниже массив;

$array = (("fizz", "buzz"),
          ("foo", "bar"))

Я бы хотел распечатать первые значения, поэтому fizz и buzz.

Прямо сейчас у меня есть следующий код;

Foreach ($a in $array)
{
    Write-Host $a[0]
}

То, что я должен получить, это fizz, но вместо этого я получаю fizz buzz [0]

Спасибо

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Вы должны думать о многомерном массиве как о таблице со строками и столбцами, например:

enter image description here

поэтому в вашем примере, где вы хотите получить первые два столбца в первой строке, вы хотите получить

$array[0][0]
$array[0][1]

Вы можете проверить это, запустив:

Write-Host $array[0][0]
Write-Host $array[0][1]

То, что вы делаете, выполняет итерацию по каждой строке и распечатывает столбец 0 для каждой строки.

Foreach ($a in $array)
{
    Write-Host $a[0]
}

Это означает, что каждая строка в $ array печатает столбец 0. Чтобы ваш код работал должным образом, вам нужно изменить $array на $array[0]:

Foreach ($a in $array[0])
{
    Write-Host $a
}

Это даст ожидаемые результаты и будет читаться как столбец foreach в строке 0 столбца печати. Цикл, однако, не нужен, так как вы можете получить тот же результат, просто используя:

Write-Host $array[0]

Который просто печатает весь ряд.

0 голосов
/ 09 ноября 2018

Вы можете адресовать отдельные элементы массива с одним индексом на измерение. с вашим образцом массива следующее даст 1-й элемент каждой оси ...

'{0}; {1}' -f $array[0][0], $array[1][0]

вывод ...

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