奇怪的阵列比较问题



我正在将一些内容写入文件,然后测试文件返回false的文件的内容;但是刺是相同的。

字符串是一个大型多行字符串。当它使用简单字符串的同一代码时,它可以按预期工作。

请查看以下测试。我无法解释为什么比较两个变量返回false,但比较对象没有区别。

第二个代码示例显示了预期的行为。

PS H: DFSMIGRATION> $ test = Indoke -Expression -Command" dfscmd.exe/view \ mydomain.com  rootdfs/batchrestore"PS H: dfsmigration> $ test |set-content。 backup.txtPS H: dfsmigration> $ test2 = get-content。 backup.txtps h: dfsmigration> if($ test -eq(get -content。 backup.txt((({" true"} else {" false"}错误的PS H: DFSMigration> if($ test -eq $ test2({" true"} else {" false"}错误的PS H: dfsmigration> compare -object -referenceObject $ test -differenceObject $ test2PS H: dfsmigration> $ test.Count2256PS H: dfsmigration> $ test2.Count2256PS H: dfsmigration> $ test.getType((ISPUBLIC ISSERIAL NAME TABESTYPE-------- ------------------------------true true对象[] System.ArrayPS H: dfsmigration> $ test2.getType((ISPUBLIC ISSERIAL NAME TABESTYPE-------- ------------------------------true true对象[] System.Array

这是预期的行为:

PS H: dfsmigration> $ test ="这是一个带负载foobar的测试字符串"PS H: dfsmigration> $ test |set-content Backuptest.txtPS H: dfsmigration> $ test2 = GET-CONTENT BACKUPTEST.TXTps h: dfsmigration> if($ test -eq $ test2({"字符串相等"} else {"他们不等于"}琴弦相等

我会使用 Compare-Object来确定数组是否相同。默认情况下,它找到差异并指示包含每个差异的侧面。因此,如果没有差异,计数将为0。

请注意,使用此方法,数组中每个项目的位置不被视为差异。如果应将不同的顺序视为不相等,那么循环将更适合。

$Arr1 = @('apple', 'banana', 'orange','tomato')
$Arr2 = @('tomato', 'potato', 'carrot')
$Arr3 = @('apple', 'banana', 'orange', 'tomato')
$Same = (Compare-Object -ReferenceObject $Arr1 -DifferenceObject $Arr2).count -eq 0
if ($Same) { Write-Host '$Arr1 is equal to $Arr2' -ForegroundColor Cyan } else { Write-Host ':(- $Arr1 is NOT equal to $Arr2'}
 $Same = (Compare-Object -ReferenceObject $Arr3 -DifferenceObject $Arr1).count -eq 0
if ($Same) { Write-Host '$Arr1 is equal to $Arr3' -ForegroundColor Cyan }

$test$test2是2个不同的数组,因此不相等。如果要循环循环阵列中的每个元素,您将看到它们包含相同的字符串。

for ($i=0; $i -lt $test.Length; $i++) {
    if ($test[$i] -eq $test2[$i]) { "True" } else { "False" }
}

最新更新