请查看代码中的注释,看看是否可以帮助我解决这个问题我正在检查$arr1的值是否在$arr2中。如果是,把它添加到列表中,如果不是,则将其添加到另一个列表中。确保两个列表/数组都没有重复。
$arr1 = @(1,2,3,4,4,2,5,7,9,9,1)
$arr2= @(5,1,2,3,6,8,1)
$NotinList = @()
$inList = @()
$counter = 0
for ($i = 0; $i -lt $arr1.length; $i++){
for( $j = 0; $j -lt $arr2.length; $j++ ){
if($arr1[$i] -ne $arr2[$j]){ #check to see if value from $arr1 is in $arr2
for($k = 0; $k -lt $NotinList.length; $k++){ #Traverse through empty array
write-host $arr1[$i]
if($NotinList[$k] -ne $arr1[$i]){ # *^ if empty array does not alreadycontain item from big $arr1, add it.
$NotinList += $arr1[$i]
}
}
}
else{
$inList += $arr1[$i]
#how would I remove duplicates from number in list since there are repeating numbers in $arr1 that are not in $arr2.
}
}
$counter++ #keep track may use for something else??
}
我将首先消除重复项,然后使用Where()
数组运算符将数组拆分为变量。
$arr1 = 'a','b','b','c','d','e','e','f','g'
$arr2 = 'a','b','c','g'
# not in list = d, e, f
# in list = a, b, c, g
$inlist,$notinlist = ($arr1 | Get-Unique).Where({$_ -in $arr2},'split')
下面是每个
包含的内容$notinlist
d
e
f
$inlist
a
b
c
g
如果您坚持手动操作,我建议使用哈希表。它们非常快,而且键必须是唯一的。
如果你关心顺序,你可以使用[ordered]
哈希表
$arr1 = 1,2,3,4,4,2,5,7,9,9,1
$arr2= 5,1,2,3,6,8,1
$inlist = [ordered]@{}
$notinlist = [ordered]@{}
foreach($entry in $arr1){
if($entry -in $arr2){
if($entry -notin $inlist.keys){
$inlist.$entry = $entry
}
}
else{
if($entry -notin $notinlist.keys){
$notinlist.$entry = $entry
}
}
}
现在你的唯一列表要么在键中要么在值中
$inlist.Keys
1
2
3
5
$notinlist.Values
4
7
9