如何用Swift提取键值对并统计年龄≥50的条目数量
Swift实现:统计年龄≥50的条目数量
需求:读取包含data键的JSON对象,data对应的值是一个由key=STRING, age=INTEGER格式条目组成的字符串,统计其中年龄≥50的条目数量并输出结果。
以下是完整实现代码:
import Foundation struct DataObject: Decodable { let data: String } let jsonString = """ {"data":"key=IAfpK, age=58, key=WNVdi, age=64, key=jp9zt, age=47, key=0Sr4C, age=68, key=CGEqo, age=76, key=IxKVQ, age=79, key=eD221, age=29, key=XZbHV, age=32, key=k1SN5, key=zGtmR, age=66, key=nlIN9, age=8, key=hKalB, age=50, key=Na33O, age=17, key=jMeXm, age=15, key=OO2Mc, age=32, key=hhowx, age=34, key=gLMJf, age=60, key=PblX6, age=66, key=0iJGV, age=50, key=cFCfU, age=5, key=J8an1, age=48, key=dkSlj, age=5"} """ do { let jsonData = jsonString.data(using: .utf8)! let dataObject = try JSONDecoder().decode(DataObject.self, from: jsonData) // 按逗号分割成单个键值对,清理空格与空项 let keyValuePairs = dataObject.data.components(separatedBy: ",") .map { $0.trimmingCharacters(in: .whitespaces) } .filter { !$0.isEmpty } var ageCount = 0 // 遍历键值对,提取年龄并统计符合条件的条目 for pair in keyValuePairs { let components = pair.components(separatedBy: "=") guard components.count == 2 else { continue } let key = components[0].trimmingCharacters(in: .whitespaces) let value = components[1].trimmingCharacters(in: .whitespaces) if key == "age", let age = Int(value), age >= 50 { ageCount += 1 } } print("年龄≥50的条目数量:\(ageCount)") } catch { print("JSON解析错误:\(error.localizedDescription)") }
关键步骤说明:
- 将
data字符串按逗号分割为单个键值对,去除前后空格并过滤空字符串,避免无效数据干扰。 - 遍历所有键值对,筛选出
age对应的数值,转换为整数后判断是否≥50,符合条件则计数递增。 - 替换原代码的强制解析
try!为do-catch错误处理,避免解析失败导致程序崩溃。
内容的提问来源于stack exchange,提问作者Gbenga B Ayannuga
相关产品推荐
相关产品推荐

