我正在遍歷字串串列,如果在哈希表中找到該字串,則將其從串列中洗掉。我注意到一些奇怪的行為。但是,如果我運行該函式兩次,則第二次運行時會從串列中洗掉更多值,我的理解是我只需要運行一次即可洗掉哈希表中匹配的所有值。我的回圈設定是否正確?
更新:感謝有用的評論,我剛剛將任何與哈希表不匹配的資產復制到不同的串列并回傳
function Compare()
{
param([System.Collections.Generic.List[string]] $list,
[Hashtable] $hashtable)
$listTwo = New-Object System.Collections.Generic.List[string]
for($i=0; $i - lt $list.Count;$i )
{
if(($hashtable.$($list[$i])) -ne $null)
{
}
else
{
$listTwo.Add($($list[$i]))
}
}
return $listTwo
}
uj5u.com熱心網友回復:
從您正在迭代的串列中洗掉元素通常不是一個好主意。一個更好的想法是創建另一個串列并將元素附加到該串列中,如果它們不存在于哈希表中。
function Compare()
{
param([System.Collections.Generic.List[string]] $list,
[Hashtable] $hashtable)
return $list | Where-Object { -not $hashtable.ContainsKey($_) }
}
此方法使用 迭代list和過濾元素Where-Object。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/423100.html
標籤:
