Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 比较两个列表/数组并索引差异的位置_Arrays_Powershell - Fatal编程技术网

Arrays 比较两个列表/数组并索引差异的位置

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,

我能够比较数组并获得元素的索引,但是这个内置的比较对象函数返回了一个奇怪的值。当我运行此代码时,它返回值-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, $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
    }