【问题标题】:Return Multidimensional Array From Function从函数返回多维数组
【发布时间】:2017-03-06 08:36:57
【问题描述】:

我在将现有的 vbs 脚本转换为 PowerShell 脚本时遇到了一些问题。我在这里用一些虚拟代码而不是我的原始代码来说明。在示例 1 中,我的数组中只有一组元素,在将数组变量返回给函数时,它只会显示 P。

但是在示例 2 中,我在数组中有 2 组元素,将数组变量返回给函数后,它将正确显示元素。

如果在示例 1 和示例 2 中的函数内部打印数组。获取结果没有任何问题。

我已经用谷歌搜索并找不到任何解决方案。非常感谢您的热心帮助。

示例 1:

function testArray {
    $array1 = @()
    $array1 += ,@("Apple","Banana")

    return $array1
}
$array2 = testArray
Write-Host $array2[0][1]

结果是“P”。

示例 2:

function testArray {
    $array1 = @()
    $array1 += ,@("Apple","Banana")
    $array1 += ,@("Orange","Pineapple")

    return $array1
}
$array2 = testArray
Write-Host $array2[0][0]

结果是“苹果”。

【问题讨论】:

  • return $array1 -> return ,$array1$array2 = testArray -> $array2 = @(testArray)
  • @petseral 有效,有什么原因,还是只是 powershell 的语法?
  • PowerShell 展开从函数返回的数组。通过在返回的数组前面加上数组构造运算符 (,),您可以将其包装在另一个数组中,该数组在返回时展开,保持嵌套数组完整。
  • 这是一个重复的问题吗?我敢肯定,这必须在这里被问过。无论哪种方式,这是我自己第一次看到这个问题,并且很感激我遇到了它。向大家致敬。

标签: arrays powershell multidimensional-array


【解决方案1】:

PowerShell 展开从函数返回的数组。在返回的数组前面加上 comma operator,,一元数组构造运算符)将其包装在另一个数组中,该数组在返回时展开,保持嵌套数组不变。

function testArray {
    $array1 = @()
    $array1 += ,@("Apple","Banana")

    return ,$array1
}

【讨论】:

  • Write-Output -NoEnumerate $array1 呢?
  • 怎么样?它比return ,$array1 或只是,$array1 有什么优势吗?
  • 大概,优点是不会创建额外的数组。缺点是输入太冗长太长。
  • 我认为创建具有单个嵌套数组引用的数组的开销可以忽略不计。
  • @wOxxOm 据推测,优点是它不会创建额外的数组。 不正确。它还会创建额外的数组。
【解决方案2】:

当你声明像

这样的单行数组时
$array1 = "Apple","Banana"

当你打电话时:

$array1[0][1]

这会发生:

这段代码

function testArray {
    $array1 = @()
    $array1 += ,@("Apple","Banana")

    return $array1
}
$array2 = testArray
Write-Host $array2[0][1]

完全一样:

$array1 = "Apple","Banana"

但是当你声明 2 行数组时:

function testArray {
    $array1 = @()
    $array1 += ,@("Apple","Banana")
    $array1 += ,@("Orange","Pineapple")

    return $array1
}
$array2 = testArray
Write-Host $array2[0][0]

这会发生:

如果您在第一个代码中需要苹果,只需调用数组 [0] 而不是数组 [0] [0]。 array[0][0] 为你返回字符。

对不起,我的英语不好,希望你能理解

【讨论】:

    猜你喜欢
    • 2014-07-23
    • 1970-01-01
    • 2018-01-05
    • 2018-09-25
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    相关资源
    最近更新 更多