【问题标题】:Iterate through jagged array遍历锯齿状数组
【发布时间】:2018-11-09 03:18:42
【问题描述】:

我正在学习 Powershell 脚本,现在我正在尝试遍历一个由 2 个值数组组成的数组,同时只打印出第一个值。

例如,取下面的数组;

$array = (("fizz", "buzz"),
          ("foo", "bar"))

我希望能够打印出第一个值,所以 fizzbuzz

现在,我有以下代码;

Foreach ($a in $array)
{
    Write-Host $a[0]
}

我应该得到的是fizz,但我得到的是fizz buzz [0]

谢谢

【问题讨论】:

  • 您描述的症状与问题中的代码不一致,按预期工作。听起来产生您症状的实际代码是Write-Host "$a[0]",即错误地应用了字符串扩展(插值);要在"..." 中引用$a[0]表达式,必须使用$(...)"$($a[0])"

标签: powershell scripting jagged-arrays


【解决方案1】:

您需要将多维数组视为具有如下行和列的表:

所以在你的例子中,你想获得第一行的前两列,你想要的是

$array[0][0]
$array[0][1]

您可以通过运行来检查:

Write-Host $array[0][0]
Write-Host $array[0][1]

您正在做的是遍历每一行并为每一行打印出第 0 列。

Foreach ($a in $array)
{
    Write-Host $a[0]
}

这是说 $array 中的 foreach 行打印出第 0 列。要使您的代码按预期工作,您需要将 $array 更改为 $array[0]

Foreach ($a in $array[0])
{
    Write-Host $a
}

这将为您提供预期的结果,并在第 0 行打印列中读取为 foreach 列。然而,循环是不必要的,因为您只需使用即可获得相同的结果:

Write-Host $array[0]

这只是打印出整行。

【讨论】:

    【解决方案2】:

    您可以使用每个维度的一个索引来处理单个数组项。使用您的示例数组,以下将给出每个轴的第一项......

    '{0}; {1}' -f $array[0][0], $array[1][0]
    

    输出...

    fizz; foo
    

    【讨论】:

      猜你喜欢
      • 2016-06-01
      • 1970-01-01
      • 2017-04-19
      • 2011-01-20
      • 2020-04-02
      • 1970-01-01
      • 2015-09-23
      • 2013-06-21
      • 2015-07-01
      相关资源
      最近更新 更多