找到两个psobject数组之间的区别?

时间:2015-06-17 18:52:40

标签: powershell

以下代码创建了两个psobject示例数组。如何区分$a$b的属性AX A*2 <> X(只是一个例子,它可以是任何复杂的预测)?< / p>

$a = 1..5 | % { New-Object -TypeName psobject -Property (@{A = $_; B= "..." }) }
$b = 2..6 | % { New-Object -TypeName psobject -Property (@{X = $_*2; Y= "..." }) }

$a但不在$b中的项目列表:1

$b但不在$a中的项目列表:12

基本上,如果代码是用F#/ C#语言编写的。它需要像not (list.Exists(x => predict(x)))这样需要lambda的东西。

2 个答案:

答案 0 :(得分:1)

这可能吗?

$a但不在$b中的项目列表:

Compare-Object $a $b -Property a,b | ? { $_.SideIndicator -eq "<=" } |
  select -Expand a

$b但不在$a中的项目列表:

Compare-Object $a $b -Property a,b | ? { $_.SideIndicator -eq "=>" } |
  select -Expand a

答案 1 :(得分:0)

跳过您可以遍历compare-object的{​​{1}} cmdlet,并检查每个对象的计算属性是否在$a的任何属性的值数组中。这听起来令人困惑,但我认为一个例子应该有帮助...

$b

或者逆转:

$a|?{($_.a*2) -notin $b.x}

我想你可以为它做一个函数,比如:

$B|?{($_.x/2) -notin $A.a}

我只是在飞行中做了那件事,但我认为没有任何理由说它不会起作用。

好的,我只是将它粘贴到ISE中就可以了。使用您的样本数据我做了:

Function CalculatedCompare{
Param(
    [Object[]]$InputObject,
    [String]$InputProperty,
    [Object[]]$DifferenceObject,
    [String]$DifferenceProperty,
    [String]$Conversion
)
    $InputObject | Where{$([ScriptBlock]::Create("$($_.$InputProperty)$conversion").Invoke()) -notin $differenceobject.$differenceproperty}
}

该函数将CalculatedCompare $a 'a' $b 'x' '*2' 为'1'的记录吐出。