循环通过二维数组时的混乱行为(foreach)

时间:2018-05-16 09:05:19

标签: powershell multidimensional-array 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")  )

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

非常感谢任何指导。

非常感谢, 本

1 个答案:

答案 0 :(得分:0)

我跑了然后得到:

a
1
____________
a
b

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

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

请注意,您在此处创建了锯齿状阵列,不一定是矩阵。