早上好,
我确信这可能不足以完全理解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") )
当我这样做时,我不断得到这种行为,所以决定做一些测试(但是没有真正取得任何进展,因此我现在在这里:)
非常感谢任何指导。
非常感谢, 本
答案 0 :(得分:0)
我跑了然后得到:
a
1
____________
a
b
是的,这是预期的行为。在第一种情况下,您说:“在第一个索引处显示我的多维数组中的内容”。在这里它找到数组(“a”,1)并返回它。在第二种情况下,你会说:“迭代我的多维数组并显示在第一个索引中的内容”。这给你一个,b。
你不能说$test[0][1]
因为$ test是一个包含一维数组的循环变量。但是,您可以说$testarray[0][1]
访问1.
请注意,您在此处创建了锯齿状阵列,不一定是矩阵。