我有 2 個陣列:
$array1 = ('1','2','7','9') $array2 = ('7','9','1','2')
這些集合是動態更改的,我需要將第一個陣列中的值添加到第二個。我需要創建一個條件 if.... 并檢查...這些陣列是否相等 - 什么也不做。
但是,如果第一個陣列有新值,例如它變成 $array1 = ('1','2','7','9', '6') 并且第二個陣列沒有這樣的值
然后我需要將這個 '6' 新值添加到第二個陣列......所以第二個陣列將變為 $array2 = ('7','9','1','2','6').. .請幫助實作它。
請注意,2 個陣列中的值可能有不同的順序,這并不重要,目標是在 2 個陣列中具有相同的值。
uj5u.com熱心網友回復:
將兩者合并并整理出非唯一值:
$array2 = @($array1;$array2) |Sort-Object -Unique
對于大型陣列,您可能希望將兩個陣列中的所有專案都添加到 HashSet 中 - 它只會存盤不同的值,因此結果集將對應于 的新值$array2:
$set = [System.Collections.Generic.HashSet[psobject]]::new()
$array1 |% { [void]$set.Add($_) }
$array2 |% { [void]$set.Add($_) }
$array2 = @($set)
uj5u.com熱心網友回復:
如果您想保留順序并附加那些尚未$array2添加的元素(按順序),您可以使用:$array1$array2Compare-Object
$array1 = '1','2','7','9','6'
$array2 = '7','9','1','2'
$array2 =
(Compare-Object -PassThru $array1 $array2 | Where-Object SideIndicator -eq '<=')
注意:Compare-Object與一般的 PowerShell 一樣,默認情況下不區分大小寫;-CaseSensitive如果需要,添加。
uj5u.com熱心網友回復:
您可以使用IsSupersetOf和UnionWith從HashSet<T>:
$array1 = [string[]] ('1','2','7','9','new value')
$array2 = [System.Collections.Generic.HashSet[string]] ('7','9','1','2')
if(-not $array2.IsSupersetOf($array1)) {
$array2.UnionWith($array1)
}
$array2
如果您需要回傳一個實際的陣列,您可以根據需要進行轉換[object[]]或回傳:[string[]]
[string[]] $array2
值得一提的是,哈希集默認區分大小寫,如果您需要不區分大小寫的哈希集,您可以使用不區分大小寫的比較器來實體化它:
$array2 = [System.Collections.Generic.HashSet[string]]::new(
[string[]]('7','9','1','2'),
[System.StringComparer]::OrdinalIgnoreCase
)
uj5u.com熱心網友回復:
您可以通過創建一個函式來構建此解決方案。
此代碼塊列出陣列 1 和陣列 2 它使用-notcontainscmdlet 檢查陣列中的元素是否在陣列 2 中,如果不是,則追加陣列 2 中的元素。
$array = @('1','2','7','9', '15')
$array2 = @('1','2','7','9')
Write-Output "$array `n"
Write-Output "$array2 `n"
$array | ForEach-Object {
if ($array2 -notcontains $_) {
$array2 = $_
}
}
Write-Output "$array2"
希望這可以幫助!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/531486.html
標籤:电源外壳
