【问题标题】:How can I compare two arrays, removing similar items, without iterating through the whole array?如何比较两个数组,删除相似的项目,而不遍历整个数组?
【发布时间】:2013-05-15 11:54:57
【问题描述】:

是否可以在不遍历两个数组的情况下比较两个数组并删除相等的值(如果它们位于相同的索引处)?这是一个例子:

$array1 = @(1,2,3,4,5,6,7,23,44)
$array2 = @(1,1,3,4,5,7,6,23,45)

$array3 = $sudo_compare_function $array1 $array2

$array3 现在将包含一个索引数组,其中$array2$array1 数组不同:

(1,5,6,8)

如果没有这样的东西,有没有一种简单的方法可以在不遍历两个数组的情况下做类似的事情?

【问题讨论】:

    标签: arrays powershell find compare powershell-2.0


    【解决方案1】:

    使用Compare-Object cmdlet 获取不同值的数组:

    $array1 = @(1,2,3,4,5,6,7,23,44)
    $array2 = @(1,1,3,4,5,7,6,23,45)
    
    $array3 = @(Compare-Object $array1 $array2 | select -Expand InputObject
    

    为了只比较相应的索引,您必须手动进行比较:

    function Compare-Indexes($a1, $a2) {
      $minindex = [math]::Min($a1.Length, $a2.Length)
      $maxindex = [math]::Max($a1.Length, $a2.Length)
    
      for ($i = 0; $i -le $minindex; $i++) {
        if ( $a1[$i] -ne $a2[$i] ) { $i }
      }
      for ( $i = $minindex + 1; $i -le $maxindex; $i++ ) { $i }
    }
    
    $array1 = @(1,2,3,4,5,6,7,23,44)
    $array2 = @(1,1,3,4,5,7,6,23,45)
    
    $array3 = Compare-Indexes $array1 $array2
    

    【讨论】:

    • 这不会只给我不同的价值观吗?我想找到在数组中发现差异的索引。
    • 这是非常具体的,我知道没有功能可以做到这一点。并且需要进行迭代。如果你不这样做,你调用的函数就会。
    猜你喜欢
    • 1970-01-01
    • 2019-06-17
    • 1970-01-01
    • 1970-01-01
    • 2013-02-09
    • 2022-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多