如何根据指定枚举毛色数组过滤Cat数组(至少匹配一种)
Swift 过滤匹配至少一种目标毛色的猫咪对象
要实现筛选出至少拥有目标毛色数组中任意一种毛色的猫咪,有两种简洁高效的实现方式:
方式一:利用集合交集判断(推荐,效率更高)
将目标毛色数组转为Set,通过判断猫咪毛色集合与目标集合是否存在交集来筛选:
let colorsToMatch = [FurColor.gray, .tabby] // 转成Set提升查找效率 let targetColorSet = Set(colorsToMatch) let filteredCats = cats.filter { !Set($0.furColor).isDisjoint(with: targetColorSet) }
isDisjoint(with:)用于判断两个集合是否完全无交集,取反后就表示存在至少一个共同毛色,符合筛选条件。
方式二:嵌套contains遍历判断
直接通过两层contains检查猫咪是否有任意一种毛色在目标数组中:
let colorsToMatch = [FurColor.gray, .tabby] let filteredCats = cats.filter { $0.furColor.contains { colorsToMatch.contains($0) } }
外层contains遍历猫咪的每一种毛色,内层contains检查该毛色是否在目标数组内,只要有一个匹配就会保留当前猫咪。
注意
如果目标毛色的数量较多,优先选择方式一,因为Set的查找操作是O(1)时间复杂度,比数组的O(n)更高效。
内容的提问来源于stack exchange,提问作者soleil
相关产品推荐
相关产品推荐

