以下代码创建了两个psobject示例数组。如何区分$a
和$b
的属性A
和X
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的东西。
答案 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'的记录吐出。