You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift如何访问分组字典内结构体的指定变量并计算单日卡路里总和

实现方案

你的groupedMeals字典结构为[String: [Meal]],每一组的value就是对应日期的所有Meal实例数组,直接对这个数组做字段提取和求和即可,你之前的代码多了一层不必要的内部循环,不需要重复遍历字典的key。

方法1:基础遍历实现(易理解)

// 用来存储最终结果:key是日期,value是当日总卡路里
var dailyTotalCalories: [String: Int] = [:]

for (date, meals) in groupedMeals {
    var total = 0
    for meal in meals {
        // 直接访问Meal的calories_eaten属性累加
        total += meal.calories_eaten
    }
    dailyTotalCalories[date] = total
}

方法2:用高阶函数简化实现(更Swift风格)

直接对每组的Meal数组用reduce方法求和,代码更简洁:

let dailyTotalCalories = groupedMeals.mapValues { meals in
    meals.reduce(0) { total, meal in total + meal.calories_eaten }
}
// 还可以进一步简写为:
// let dailyTotalCalories = groupedMeals.mapValues { $0.reduce(0, { $0 + $1.calories_eaten }) }

上述代码中的mapValues会对字典每个值(也就是Meal数组)做处理,返回新的字典,key还是原来的日期,value就是对应数组的calories_eaten总和,不需要手动写循环。

补充说明

如果你之前用map访问不到属性,大概率是类型没有匹配上,确认你从Firestore解码得到的实例确实是Meal类型、没有被擦除为Any类型就可以直接访问结构体的存储属性,不需要调用get方法。

内容的提问来源于stack exchange,提问作者Kamil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 23:06:05