问题 Powershell:二维数组


以下按预期工作:

$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

将$值更改为:

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

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

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

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

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

8249
2017-08-16 21:26


起源



答案:


这是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


13
2017-08-16 21:36



谢谢你的链接。这是非常奇怪的语法。我会将你给出的例子解释为定义$ values [1,0]和$ values [1,1]。 - Michael Frederick


答案:


这是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


13
2017-08-16 21:36



谢谢你的链接。这是非常奇怪的语法。我会将你给出的例子解释为定义$ values [1,0]和$ values [1,1]。 - Michael Frederick