Swift数组搜索:统计指定参数值≥2000的元素数量
Swift数组搜索与统计:查找location≥2000的元素并统计数量
没问题,我来帮你搞定Swift数组里的这个搜索和统计需求~ 首先得明确你的数组元素类型,我分两种常见场景来给你示例代码:
场景1:数组元素是自定义类型(比如包含location属性的模型)
假设你有一个自定义的结构体/类,用来存储包含location的数据,比如:
struct Place { let location: Int // 这里假设location是整数类型,根据你的实际情况调整为Float/Double都可以 }
接下来有两种实现方式,按需选择:
方式1:直观筛选+统计(同时保留符合条件的元素)
这种方式会先筛选出所有符合条件的元素,再统计数量,优点是能拿到筛选后的数组,方便后续使用:
// 示例数组 let places: [Place] = [ Place(location: 1500), Place(location: 2200), Place(location: 3000), Place(location: 1800), Place(location: 2500) ] // 筛选location≥2000的元素 let qualifiedPlaces = places.filter { $0.location >= 2000 } // 统计数量 let qualifiedCount = qualifiedPlaces.count print("符合条件的元素有 \(qualifiedCount) 个:\(qualifiedPlaces)")
filter方法会遍历数组,只保留满足闭包条件的元素,生成新数组;之后取这个数组的count就是你要的数量。
方式2:高效直接统计(仅需数量时推荐)
如果只需要统计数量,不需要保留筛选后的元素,用reduce更高效——它不会生成新数组,直接累计符合条件的元素个数:
let qualifiedCount = places.reduce(0) { total, place in total + (place.location >= 2000 ? 1 : 0) } print("符合条件的元素数量:\(qualifiedCount)")
reduce从初始值0开始,每遍历一个元素就判断:如果location≥2000就给总数加1,否则加0,最后得到总数量,内存占用更低。
场景2:数组元素是字典类型
如果你的数组是[[String: Int]](或者其他数值类型的字典),代码只需稍作调整,注意处理字典值的可选性:
// 示例字典数组 let locationDictArray: [[String: Int]] = [ ["location": 1900], ["location": 2100], ["location": 2000], ["location": 1700] ] // 方式1:筛选+统计 let qualifiedDicts = locationDictArray.filter { ($0["location"] ?? 0) >= 2000 } let count = qualifiedDicts.count // 方式2:直接统计 let countReduce = locationDictArray.reduce(0) { total, dict in total + ((dict["location"] ?? 0) >= 2000 ? 1 : 0) }
这里用?? 0是为了处理字典中不存在location键的情况,避免出现nil报错,你可以根据实际需求调整默认值。
内容的提问来源于stack exchange,提问作者Youo.info
相关产品推荐
相关产品推荐

