【问题标题】:How to represent a single object in a nested array as an array?如何将嵌套数组中的单个对象表示为数组?
【发布时间】:2020-12-15 20:07:58
【问题描述】:

我有一个具有以下结构的 powershell 嵌套数组。

$jHosts = @(@("Host-1","Host-3"),@("Host-2","Host-4"),@("Host-5"))

还有我的用于迭代嵌套数组的 powershell 脚本。

    for($i=0; $i -le $jHosts.Length; $i++){  
        Write-Host $jHosts[$i]  
        for($k=0;$k -le $jHosts.Length; $k++){  
            Write-Output $jHosts[$i][$k]
        }
    }

Write-output 显示如下输出,

HOST-1
HOST-3
HOST-2
HOST-4
H
O
S
T

因为我的 for 循环读取前 2 个嵌套数组中的所有值,但是当它是单个对象时,它会读取第三个数组字符串的每个字符。我在这里做错了什么?

【问题讨论】:

标签: powershell


【解决方案1】:

我无法重现您的结果,但您的代码仍然包含两个逻辑错误:

  1. 在循环定义中使用-le 运算符可以忽略实际的数组边界。请改用-lt

  2. 您为嵌套数组使用了错误的长度。在“k”循环中将$jHosts.Length 替换为$jHosts[$i].Length

这就是您的代码似乎产生有效结果的方式:

$jHosts = @(@("Host-1","Host-3"),@("Host-2","Host-4"),@("Host-5"))

for($i=0; $i -lt $jHosts.Length; $i++){  
    Write-Host $jHosts[$i]  
    for($k=0;$k -lt $jHosts[$i].Length; $k++){  
        Write-Output $jHosts[$i][$k]
    }
}

输出:

Host-1 Host-3
Host-1
Host-3
Host-2 Host-4
Host-2
Host-4
Host-5
Host-5

【讨论】:

    【解决方案2】:

    要遍历数组,请使用Count 属性,而不是Length。 在您的情况下,由于数组中的最后一个元素只有一项,因此它将被 PowerShell 解包以充当单个字符串“Host-5”。

    如果你选择"Host-5".Length,答案是6(字符串中有6个字符)
    如果你这样做"Host-5".Count,答案是1(只有一个字符串)

    另外,您通过执行-le 迭代了一层太深,这应该是-lt,因为您从 0 开始迭代。

    $jHosts = @(@("Host-1","Host-3"),@("Host-2","Host-4"),@("Host-5"))
    for($i=0; $i -lt $jHosts.Count; $i++){  
        for($k=0;$k -lt $jHosts[$i].Count; $k++){  
            Write-Output $jHosts[$i][$k]
        }
    }
    

    返回

    Host-1
    Host-3
    Host-2
    Host-4
    Host-5
    

    如果我在您的代码中添加额外的行 Write-Host $jHosts[$i] 并执行

    $jHosts = @(@("Host-1","Host-3"),@("Host-2","Host-4"),@("Host-5"))
    for($i=0; $i -lt $jHosts.Count; $i++){  
        Write-Host $jHosts[$i]
        for($k=0;$k -lt $jHosts[$i].Count; $k++){  
            Write-Output $jHosts[$i][$k]
        }
    }
    

    结果是

    Host-1 Host-3
    Host-1
    Host-3
    Host-2 Host-4
    Host-2
    Host-4
    Host-5
    Host-5
    

    【讨论】:

      猜你喜欢
      • 2018-07-10
      • 1970-01-01
      • 2020-07-03
      • 2017-03-25
      • 1970-01-01
      • 2017-11-15
      • 2017-03-27
      • 2021-05-28
      • 2021-11-06
      相关资源
      最近更新 更多