swift - 在swift中从每天的日期总结类似的月份对象
问题描述
伙计们,我的数据库的结构是为了存储每日步数数据。我需要将每天的步骤总结为每月。这是我的要求如下
//Daily Data from DB
let dailyData = [["steps": 1000,
"date": 2018/04/28],
["steps": 1000,
"date": 2018/04/29],
["steps": 1000,
"date": 2018/04/30],
["steps": 1000,
"date": 2018/04/01],
["steps": 1000,
"date": 2018/05/02],
["steps": 1000,
"date": 2018/05/03],
["steps": 1000,
"date": 2018/05/04],
["steps": 1000,
"date": 2018/05/05],
["steps": 1000,
"date": 2018/06/06],
["steps": 1000,
"date": 2018/06/07]]
//I need to sum daily data to monthly data as follows
let monthlyData = [["steps": 4000,
"month": April],
["steps": 4000,
"month": May],
["steps": 2000,
"month": June]]
请帮我解释一下逻辑。在日常数据中,我在字符串和日期中也有日期类型。
解决方案
let dailyData: [[String: Any]] =
[["steps": 1000, "date": "2018/04/28"],
["steps": 1000, "date": "2018/04/29"],
["steps": 1000, "date": "2018/04/30"],
["steps": 1000, "date": "2018/04/01"],
["steps": 1000, "date": "2018/05/02"],
["steps": 1000, "date": "2018/05/03"],
["steps": 1000, "date": "2018/05/04"],
["steps": 1000, "date": "2018/05/05"],
["steps": 1000, "date": "2018/06/06"],
["steps": 1000, "date": "2018/06/07"]]
let groupedDict = Dictionary(grouping: dailyData, by: { ($0["date"] as! String).prefix(7) })
let mappedDict = groupedDict.map { ["month": findMonth(str: String($0)), "steps": $1.map({ $0["steps"] ?? 0 }) ] }
let result = mappedDict.map { ["month": $0["month"] ?? "", "steps": ($0["steps"] as! [Int]).reduce(0, { $0 + $1 }) ] }
print(result)
在哪里,
func findMonth(str: String) -> String {
let dateformatter = DateFormatter()
dateformatter.dateFormat = "yyyy/MM"
let date = dateformatter.date(from: str)!
dateformatter.dateFormat = "MMMM"
return dateformatter.string(from: date)
}
结果是:
[
["month": "June", "steps": 2000],
["month": "April", "steps": 4000],
["month": "May", "steps": 4000]
]
推荐阅读
- sparql - 当您有多字和缩略字符时,在 sparql 中进行自由文本搜索
- database - Aerospike ACID - 如何知道超时事务的最终结果?
- c# - 如何在 HDF5 C# 上创建复合数据集
- android - ViewPager 中包含的 Fragment 内的 RecyclerView 为空
- r - R中张量的doParallel性能
- fullcalendar - 日期导航将垂直滚动重置到顶部
- asp.net - 从 ASP.NET 按需运行计划任务?
- python - 如何使用 64 位 IEE754 将 bin 转换为 float,
- javascript - 在我按下按钮之前脚本正在执行
- reactjs - 如何在 URL 查询字符串上存储对象