我想知道是否有人可以通过函数从多维数组返回值时对我遇到的问题有所了解:
$ArrayList = @()
function MultiDimensionalArrayTest
{
param(
[array]$ArrayList
)
for($i = 0; $i -lt 1; $i++)
{
$ArrayModify += ,@("Test", "Test")
}
return $ArrayModify
}
$ArrayModify = MultiDimensionalArrayTest
foreach ($item in $ArrayModify)
{
Write-Host $item[0]
}
执行循环后,返回的值为:
T
T
但是,如果for语句被lopped两次,则返回的值为:
Test
Test
我的目标是检索x数量的值"测试"来自Write-Host $ item [0],无论语句执行多少次
如果在$ ArrayModify数组中捕获并返回两行或更多行,则该值为system.object [],但是如果循环一次,则值为" Test,Test"被捕获,当执行Write-Host $ item [0]时,它将打印T。
非常感谢任何建议。
答案 0 :(得分:2)
不是处理它的最干净的方法,但是你需要阻止PowerShell将单个元素数组展开为具有两个元素的数组。
function MultiDimensionalArrayTest{
$ArrayModify = @()
for($i = 0; $i -lt 1; $i++){
$ArrayModify += ,@("Test$i", "Test$i$i")
}
,@($ArrayModify)
}
使用上面的函数我会相信得到所需的输出。 ,@($ArrayModify)
确保返回数组,而不是如上所示将其展开到其元素中。
$ArrayList = @()
$ArrayList = MultiDimensionalArrayTest
foreach ($item in $ArrayList){$item[0]}
在循环中为$i -lt 1
提供输出
Test0
在循环中为$i -lt 2
提供输出
Test0
Test1
您的输出
关于使用$i -lt 1
示例的输出,PowerShell将数组展开为包含2个元素的单维数组"测试"和"测试"。你正在看到这封信" T"因为所有字符串都支持数组索引,并将从请求的位置返回字符。
代码的其他问题
不要击败死马,但要真正查看其他答案和评论,因为它们提供了一些关于某些编码错误和您在问题中提供的代码异常的提示。
答案 1 :(得分:0)
首先,我注意到您的代码中存在多个错误。
此行$ArrayList = @()
没用,因为之后您不会使用$ArrayList
变量。
关于MultiDimensionalArrayTest
函数,您声明了一个$ArrayList
参数,但您从未在函数中使用它。
最后,如果此行无效$ArrayModify = MultiDimensionalArrayTest = $item
,则可能意味着$ArrayModify = MultiDimensionalArrayTest
。
答案 2 :(得分:0)
这不是你问题的完整答案,因为我不确定你想要达到的目的,但请看看这一行:
$ArrayModify = MultiDimensionalArrayTest = $item
这是没有意义的,因为你正在调用MultiDimensionalArrayTest函数并向它传递两个参数,它们是" =" (powershell假设这是一个字符串)和$ item(null对象)。然后指定返回$ ArrayModify的任何内容。
原因" T"输出,是因为你输出的是当前字符串的第一个元素。 "试验"当$ item是一个字符串数组时输出。