Swift中如何搜索嵌套数组的String属性并保留父结构?
解决方案
要实现保留包含目标Car的Dealer,且每个Dealer仅显示符合条件的Car,需要分两步处理:先筛选出有匹配Car的Dealer,再对每个Dealer的Car数组做过滤。
修改后的代码示例
let searchQuery = "Car 23_0" let searchResult = result.dealers // 第一步:只保留包含至少一辆匹配Car的Dealer .filter { dealer in dealer.cars.contains { $0.name.contains(searchQuery) } } // 第二步:对每个Dealer,仅保留符合搜索条件的Car .map { dealer in var filteredDealer = dealer filteredDealer.cars = dealer.cars.filter { $0.name.contains(searchQuery) } return filteredDealer }
代码说明
- 第一步过滤Dealer:使用
filter结合contains判断,只留下旗下有至少一辆Car的名称包含搜索字符串的Dealer,完全没有匹配Car的Dealer会被排除。 - 第二步过滤Car数组:通过
map创建每个Dealer的副本,将副本的cars数组替换为仅包含符合搜索条件的Car,最终每个Dealer下只会显示匹配的Car条目。
可选优化:忽略大小写的模糊搜索
如果需要支持不区分大小写的搜索,可以把contains替换为localizedCaseInsensitiveContains,适配多语言场景:
// 替换两处contains判断为: $0.name.localizedCaseInsensitiveContains(searchQuery)
内容的提问来源于stack exchange,提问作者zumzum
相关产品推荐
相关产品推荐

