【问题标题】:Subtraction arrays (Powershell)减法数组(Powershell)
【发布时间】:2020-01-04 11:21:45
【问题描述】:

有两个 $A 和 $B 数组。我需要得到第三个 $C 数组,它由第一个数组的所有元素组成,而第二个数组中没有这些元素。 IE。 $A = $B + $C。当然$B数组的长度加上$C数组的长度等于$A数组的长度。

$A = 'a', 'b', 'c', 'a', 'a' 

$B = 'b', 'a', 'a' 

# This is an array that is consisted of elements of the first array that are not in the second array.

$C = 'a', 'c' 

下一个动作本身不起作用,所以它会删除所有匹配项:

# Not suitable

$A | Where-Object { $B -notcontains $_ }

---
c

此解决方案应该有效。但是,据我了解,在 Powershell 中没有从数组中删除元素的操作。也就是没有这样的操作:{ Remove $j element from $A array }

ForEach ($i in $B) { 

    ForEach ($j in $A) { 

        if ($i -eq $j) { { Remove $j value from $A array }; break }
    }
}

显然在学习 Powershell 的过程中,我错过了一些东西。我会问你是否有任何删除数组元素的操作。我怎样才能得到我想要的 $C 数组?

【问题讨论】:

  • 将管道分配给 $C 变量,它将保存该管道的输出。如果你想确保结果是一个数组,就这样创建它...[array]$C = YourPipelineCode | GoesHere

标签: powershell


【解决方案1】:

您正在寻找compare-objectlink

$A = 'a', 'b', 'c', 'a', 'a' 
$B = 'b', 'a', 'a' 

Compare-Object -ReferenceObject $a -DifferenceObject $b

输出:

InputObject SideIndicator
----------- -------------
c           <=           
a           <=           

【讨论】:

    【解决方案2】:

    数组是固定大小的,因此您不能从中删除项目(最好的做法是将它们设为空),也不能添加对象。像 += 操作这样看似添加到数组的方法实际上会重新创建一个全新的数组来添加缓慢的值,“about_Arrays”文档中很好地介绍了这一点以及更多内容,值得一读。

    对于可用于各种事物的通用列表类型,请查看“通用列表”类型,该类型同时具有 Add 和 Remove 方法(以及更多),并且有时非常有用。

    文档:https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1

    PowerShell 示例:

    $List = New-Object 'System.Collections.Generic.List[System.Object]'
    $List.AddRange(('Test','Test2','Test3'))
    $List.Remove('Test2')
    

    或者一个更复杂对象的例子:

    $List = New-Object 'System.Collections.Generic.List[System.Object]'
    $List.AddRange((Get-Process))
    $List.Remove($($List.Where({$_.ProcessName -eq 'Calculator'})))
    

    “System.Object”部分也可以更窄更具体,如 [String] 或 [Int]。

    【讨论】:

      猜你喜欢
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-07
      • 1970-01-01
      相关资源
      最近更新 更多