循环访问二维数组(foreach)时的混淆行为



早上全部,

我敢肯定,这可能是由于缺乏完全了解 PowerShell 中二维数组访问的工作原理,但我遇到了一些奇怪的行为:

这是我的代码:

$testarray = @( ("a",1),("b",2)) 
echo $testarray[0]
echo "____________"
foreach ($test in $testarray)
{
echo $test[0]
}

现在,当我运行它时,我希望两个回声都能产生 A1,并且我已经设置了一个 2D 数组,其中元素 0 由 2 个值 A 和 1 组成。但是当我循环浏览时,我没有得到相同的结果。

foreach 是否以不同的方式处理这些数组?从理论上讲,我应该能够通过$test[0][1]来访问值 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")  )

当我这样做时,我一直有这种行为,所以决定做一些测试(但并没有真正取得任何进展,因此为什么我现在在这里:))

任何指导将不胜感激。

非常感谢, 本

我运行它并得到:

a
1
____________
a
b

是的,这是预期的行为。在第一种情况下,您说:"在第一个索引处显示我的多维数组中的内容"。在这里,它找到数组("a",1)并返回该数组。在第二种情况下,您说:"遍历我的多维数组并显示其中第一个索引中的内容"。这给了你一个,b。

你不能说$test[0][1]$test因为它是一个包含一维数组的循环变量。但是,您可以说$testarray[0][1]访问 1。

请注意,您在此处创建了一个交错数组,不一定是矩阵。

最新更新