Powershell:多维数组更改从" system.object []"返回值。

时间:2015-03-13 11:14:42

标签: arrays powershell for-loop multidimensional-array

我想知道是否有人可以通过函数从多维数组返回值时对我遇到的问题有所了解:

$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。

非常感谢任何建议。

3 个答案:

答案 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是一个字符串数组时输出。