Arrays 比较两个列表/数组并索引差异的位置
我能够比较数组并获得元素的索引,但是这个内置的比较对象函数返回了一个奇怪的值。当我运行此代码时,它返回值-1 这是我的密码Arrays 比较两个列表/数组并索引差异的位置,arrays,powershell,Arrays,Powershell,我能够比较数组并获得元素的索引,但是这个内置的比较对象函数返回了一个奇怪的值。当我运行此代码时,它返回值-1 这是我的密码 # compare to arrays $array1 = @(1,2,3,4,5) $array2 = @(1,2,7,4,5) $difference = Compare-Object $array1 $array2 # get the position of the difference in arrays [array]::IndexOf($array1,
# compare to arrays
$array1 = @(1,2,3,4,5)
$array2 = @(1,2,7,4,5)
$difference = Compare-Object $array1 $array2
# get the position of the difference in arrays
[array]::IndexOf($array1, $difference)
[array]::IndexOf($array2, $difference)
结果
PS C:\...\2017-06-25> C:\...\2017-06-25\compareArrays.ps1
-1
-1
我将用它来读取文件并比较它们,并告诉我差异在文件中的位置。问题是
比较对象的输出与IndexOf()中使用它的方式不匹配。
在您的示例中,每个对象中只有一个不同的对象,但每个对象可能有多个对象,因此我们需要在每个对象上循环。我们只需要InputObject
属性
foreach ($LeftDiff in $LeftDiffs.InputObject) {
[array]::IndexOf($array1, $LeftDiff )
}
foreach ($RightDiff in $RightDiffs.InputObject) {
[array]::IndexOf($array2, $RightDiff)
}
也许像
function Compare-Array {
param(
[Array] $array1,
[Array] $array2
)
if ( -not (Compare-Object $array1 $array2) ) {
return -1
}
for ( $i = 0; $i -lt $array1.Count; $i++ ) {
if ( $array1[$i] -eq $array2[$i] ) {
return $i
}
}
return $array1.Length
}
如果数组相等或两个数组之间的第一个差的索引相等,则返回-1。是否查看了对象类型$difference
以及其结构和方法?你可能会发现这些信息很有启发性。尝试$difference.GetType()
和$difference |获取成员
。也可能是有用和有趣的
foreach ($LeftDiff in $LeftDiffs.InputObject) {
[array]::IndexOf($array1, $LeftDiff )
}
foreach ($RightDiff in $RightDiffs.InputObject) {
[array]::IndexOf($array2, $RightDiff)
}
function Compare-Array {
param(
[Array] $array1,
[Array] $array2
)
if ( -not (Compare-Object $array1 $array2) ) {
return -1
}
for ( $i = 0; $i -lt $array1.Count; $i++ ) {
if ( $array1[$i] -eq $array2[$i] ) {
return $i
}
}
return $array1.Length
}