我有两个数组有超过500,000个值,需要比较才能找到差异。数组中的某些值为$null
。当我尝试执行以下代码并收到错误Compare-Object : Cannot bind argument to parameter 'ReferenceObject' because it is null
是否有解决此问题的方法或是否有更好,更快的方法来找到差异?我只对方差/差异的数量感兴趣。
谢谢!
示例代码:
$objSource = @('a', $null, 'c')
$objTarget = @('a', 'b','c')
Compare-Object -ReferenceObject $objSource -DifferenceObject $objTarget | Measure
错误讯息:
Compare-Object : Cannot bind argument to parameter 'ReferenceObject' because it is null . At line:4 char:32
+ Compare-Object -ReferenceObject <<<< $objSource -DifferenceObject $objTarget
+ CategoryInfo : InvalidData: (:) [Compare-Object], ParameterBindingValid ationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft .PowerShell.Commands.CompareObjectCommand
答案 0 :(得分:3)
documentation表示如果-ReferenceObject
或-DifferenceObject
为$null
,则会发生这种情况,但如果这些对象的任何元素都没有实际覆盖,则会发生这种情况。
注意:如果引用集或差集为null($ null),则Compare-Object会生成终止错误。
快速解决方法是用控制字符替换那些$null
元素或类似的东西。
$objSource = @('a', $null, 'c') -replace "^$","null"
$objTarget = @('a', 'b','c') -replace "^$","null"
Compare-Object -ReferenceObject $objSource -DifferenceObject $objTarget
-replace
将使用字符串“null”从数组中删除那些空条目。所以我们现在可以直观地看到这些数据。不太可能,该文本将是一个自然元素,但你必须保持警惕相同。如果null不合适,我会建议将bagel作为关键字!
答案 1 :(得分:2)
这似乎有效:
$objSource = @('a', $null, 'c')
$objTarget = @('a', 'b','c')
Compare-Object -ReferenceObject ([string[]]$objSource) -DifferenceObject ([string[]]$objTarget) | Measure