【问题标题】:How do I do operations with numeric strings inside an array (in powershell)?如何对数组内的数字字符串进行操作(在 powershell 中)?
【发布时间】:2019-10-22 19:14:09
【问题描述】:

假设我的变量$a 是一个包含“1”和“2”作为字符串的数组。

$a = "1", "2"

现在我想通过管道使用foreach 从每个值中减去 1,所以我会做类似的事情

$a | foreach{$_ = [int]$_ - 1}

但这似乎什么也没做,但不会产生错误。所以$a 仍然包含“1”和“2”。我很难理解我哪里出错了......如果我没有数组,这是可能的,所以这是可行的:

$b = "3"; $b - 2

它会返回 1。所以我也尝试不使用“[int]”,但它仍然失败,所以我猜它要么与管道或我的 foreach 有关,但我不知道为什么这样做。

有什么建议吗?

【问题讨论】:

    标签: arrays powershell foreach


    【解决方案1】:

    您的 foreach 并没有像您想象的那样改变原始数组中的项目 - 您将计算值分配给上下文变量 $_,而不是更新数组索引。

    您可以使用计算值创建一个新数组,如下所示:

    $a = $a | foreach { [int]$_ - 1 }
    

    或就地改变原始数组中的项目:

    for( $i = 0; $i -lt $a.Length; $i++ )
    {
        $a[$i] = [int]$a[$i] - 1
    }
    

    请注意,您的第二个示例也不完全符合您的想法:

    PS> $b = "3"; $b - 2
    1
    PS> $b
    3
    

    $b - 2 部分是一个 表达式,它被评估并回显到控制台 - 它不会更改 $b 的值,因为您尚未将表达式的结果分配回去对任何东西。

    【讨论】:

      【解决方案2】:

      只需将实例变量添加到循环的最后一行,如下所示:

      $a = $a | foreach{$_ = [int]$_ - 1; $_}
      

      【讨论】:

      • 我建议$a = $a | foreach{ [int]$_ - 1 },它不仅更简洁高效,还避免了分配给自动变量$_),这通常应该避免.
      猜你喜欢
      • 2022-10-18
      • 2022-10-19
      • 1970-01-01
      • 2015-06-29
      • 1970-01-01
      • 2015-01-19
      • 1970-01-01
      • 2018-07-14
      • 1970-01-01
      相关资源
      最近更新 更多