【问题标题】:Powershell: Two dimension arraysPowershell:二维数组
【发布时间】:2013-08-19 09:27:24
【问题描述】:

以下按预期工作:

$values = @( ("a", "b"), ("c", "d") )
foreach($value in $values)
{
  write-host "Value 0 =" $value[0]
  write-host "Value 1 =" $value[1]
}

结果(1):

Value 0 = a
Value 1 = b
Value 0 = c
Value 1 = d

但如果我将 $values 变量更改为:

$values = @( ("a", "b") )

结果(2)是:

Value 0 = a
Value 1 =
Value 0 = b
Value 1 =

而我原本期望结果 (3) 是:

Value 0 = a
Value 1 = b

将 $value 更改为:

$values = @( ("a"), ("b") )

给出与上面的 result(2) 相同的结果。这些是非常不同的数据表示。

我正在编写的脚本需要能够处理二维数组,其中第一个维度的长度从 0 到 N。我希望能够编写脚本,以便如果第一级元素需要添加(或删除)我不必更改脚本的逻辑;我希望能够只编辑“数据”。

所以我的问题是:如何标记二维数组,以便当数组的第一个维度的长度为 1 时,显示的 foreach 循环将正常工作?

get-host 响应:

Name             : ConsoleHost
Version          : 2.0
InstanceId       : 2338657f-e474-40d8-9b95-7e2b5f6a8acf
UI               : System.Management.Automation.Internal.Host.InternalHostUserInterface
CurrentCulture   : en-US
CurrentUICulture : en-US
PrivateData      : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
IsRunspacePushed : False
Runspace         : System.Management.Automation.Runspaces.LocalRunspace

【问题讨论】:

    标签: arrays powershell notation


    【解决方案1】:

    这是 PowerShell 的数组处理行为可能导致意外结果的另一种情况。

    我认为您需要使用逗号技巧(数组运算符)来获得所需的结果:

    $values = @( ,("a", "b") )
    foreach($value in $values)
    {
      write-host "Value 0 =" $value[0]
      write-host "Value 1 =" $value[1]
    }
    

    结果:

    Value 0 = a
    Value 1 = b
    

    其实你只需要这个:

    $values = ,("a", "b")
    

    本文详细解释了 PowerShell 对数组的处理:

    http://blogs.msdn.com/b/powershell/archive/2007/01/23/array-literals-in-powershell.aspx

    【讨论】:

    • 感谢您的链接。这是很奇怪的语法。我会将您给出的示例解释为定义 $values[1,0] 和 $values[1,1]。
    猜你喜欢
    • 1970-01-01
    • 2016-10-14
    • 2019-01-23
    • 2012-03-12
    • 2017-01-19
    • 1970-01-01
    • 2022-01-22
    相关资源
    最近更新 更多