Непонятное поведение при циклическом прохождении 2-мерного массива (foreach) - PullRequest
0 голосов
/ 16 мая 2018

Доброе утро,

Я уверен, что это может быть недостатком полного понимания того, как работает доступ к 2-мерным массивам в PowerShell, но я испытываю странное поведение:

Вотмой код:

$testarray = @( ("a",1),("b",2)) 

echo $testarray[0]
echo "____________"

foreach ($test in $testarray)
{

    echo $test[0]

}

Теперь, когда я запускаю это, я ожидаю, что оба эха будут производить A1, и я настроил 2D-массив, где элемент 0 состоит из 2 значений A и 1. Но когда я перебираюэто я не получаю такие же результаты.

По-разному ли foreach относится к этим массивам?В теории я должен иметь возможность получить доступ к значению 1, набрав $test[0][1].

Это ожидаемое поведение?Я склонен думать, что не до конца понимаю, что foreach делает с массивом.

Причина, по которой я использую 2D-массив, заключается в том, что я хотел бы сохранить FileObject в первом элементе, а затемдружественное имя во втором, например:

$SLFile = (Get-ChildItem -Path $folder -Filter "file1_*.csv" | sort LastWriteTime -Descending)[0]
$SOHFile = (Get-ChildItem -Path $folder -Filter "file2_*.csv" | sort LastWriteTime -Descending)[0]

#Add to an array
$fileArray = @(  ($SLFile,"FriendlyFile1Name"), ($SOHFile, "FriendlyFile2Name")  )

Когда я делал это, я продолжал получать такое поведение, поэтому решил провести некоторое тестирование (но на самом деле не достиг никакого прогресса, поэтому я и сейчас здесь:))

Любое руководство будет высоко ценится.

Большое спасибо, Бен

1 Ответ

0 голосов
/ 16 мая 2018

Я запускаю его и получаю:

a
1
____________
a
b

И да, это ожидаемое поведение. В первом случае вы говорите: «Покажите мне, что находится в моем многомерном массиве в первом индексе». Здесь он находит массив ("a", 1) и возвращает его. Во втором случае вы говорите: «Переберите мой многомерный массив и покажите, что находится в первом индексе в обоих». Это дает вам, б.

Вы не можете сказать $test[0][1], потому что $ test - это переменная цикла, содержащая одномерный массив. Вы можете, однако, сказать $testarray[0][1], чтобы получить доступ к 1.

Обратите внимание, что вы создали здесь зубчатый массив, не обязательно матрицу.

...