如果我有兩個資訊陣列。一個很大,另一個小得多。
$lista ="1,2,3,4,5...etc for a lot "
$listb ="1,9,11" (Much smaller)
If ($listA -contains $listB){
Do stuff
}
這有意義并且有效嗎?
在我看來,它并不總是有效,而且我無法仔細檢查它。
uj5u.com熱心網友回復:
包含運算子非常適合您的用例,但是,如果您嘗試將一個陣列與另一個陣列進行比較,但這是行不通的,這些運算子可以幫助您確定一個元素(標量、單個值)是否存在于陣列中。
兩個對 ( -in/ -notin) 和 ( -contains/ -notcontains) 應該同樣有效,唯一的區別是標量的放置位置,對于第一對標量在操作的左側,而對于后面的標量在右側-手邊。
取自檔案以幫助我們對解釋給出一些看法:
<Collection> -contains <Test-object>
<Collection> -notcontains <Test-object>
<Test-object> -in <Collection>
<Test-object> -notin <Collection>
至于您當前的代碼,這將需要一個回圈,可能在small array上。為什么?
這些運算子在檢測到第一個 match后立即停止比較,而相等運算子評估所有輸入成員。在一個非常大的集合中,這些運算子比相等運算子回傳得更快。
按照這個邏輯,你可以遍歷你的小陣列并添加比較,這取決于你哪個對你來說更具可讀性。您的代碼可能如下所示:
$lista = 1,2,3,4,5,6,7,8,9,10
$listb = 2,4,6,8,10
foreach($item in $listb)
{
if($item -in $lista) {
$item
# Do something here
}
}
可能存在 aHashSet<T>非常有用的用例,例如,如果我們想要從中獲取唯一值$lista(在這種情況下,我們希望不區分大小寫,因此在其建構式上使用 out of StringComparer.OrdinalIgnoreCase 屬性)并查看哪些值也包含在 上$listb,在這種情況下,我們可能希望使用.Contains(..)此類的方法而不是運算子。
$lista = 'A','x','y','z','a','B','b','C','c'
$listb = 'a','B','c'
$hashset = [System.Collections.Generic.HashSet[string]]::new(
[string[]]$lista,
[System.StringComparer]::OrdinalIgnoreCase
)
foreach($item in $listb)
{
if($hashset.Contains($item)) {
$item
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/428268.html
標籤:电源外壳
上一篇:如何將輸出格式化為檔案
下一篇:正則運算式在xml中查找鍵/值
