PowerShell数组匹配计数异常:预期Five却得Two,求代码修正
PowerShell数组匹配计数问题修正
你的代码逻辑存在偏差:当前逻辑是统计$array中有多少元素在$array2中出现过(仅blue和red满足,总计2次),但你实际需要的是统计$array2中有多少元素属于$array(blue出现4次+red出现1次,总计5次)。以下是修正后的代码:
$array = @('blue','red','purple','pink') $array2 = @('blue','red','blue','yellow','blue','blue','a','d') # 统计$array2中属于$array的元素总数量 $matchingCount = ($array2 | Where-Object { $_ -in $array }).Count # 将数字转换为对应英文表述 switch ($matchingCount) { 0 { $number = "None" } 1 { $number = "One" } 2 { $number = "Two" } 3 { $number = "Three" } 4 { $number = "Four" } 5 { $number = "Five" } default { $number = "Multiple" } } $number
修正说明
- 核心逻辑调整:使用
Where-Object { $_ -in $array }过滤出$array2中所有属于$array的元素,再通过.Count获取总匹配数,这才是你需要的统计维度。 - 代码简化:用
switch语句替代冗长的If-ElseIf链,提升可读性和维护性。 - 变量优化:移除了不必要的初始变量赋值,逻辑更清晰。
关于你提到的数值数组“符合预期”的情况,大概率是测试场景的巧合——原逻辑本质还是统计$array中存在于$array2的元素数量,而非$array2的匹配元素总数,建议重新验证数值数组的测试用例。
内容的提问来源于stack exchange,提问作者Jim
相关产品推荐
相关产品推荐

