我正在创建一个简单的分析图,为避免实时进行繁重的查询,我需要将缓存的结果数据集保存在专用于这些统计信息的表中。
任何用户都可以尝试某些课程,而我想使用状态保存该课程的ID。所以像
{ "invited": [1,3,6], "done": [2,9] }
我写这个功能
u.courses.map { |w| [w.status, []<<w.id] }.to_h
但是当然每次迭代都会初始化我的数组,所以我有
{"invited"=>[5101]}
如果我尝试
u.courses.map { |w| [w.status, []<<w.id] }
我得到
[["invited", [1]], ["invited", [748]], ["invited", [1445]], ["invited", [2113]], ["invited", [2833]], ["invited", [6017]], ["invited", [4146]], ["invited", [5101]]]
如何在第一次迭代中创建数组,并将其保留在地图中?
您可以尝试each_with_object
:
u.courses.each_with_object({}){|w, o| (o[w.status] ||= []) << w.id}
u.courses.reduce({}){|o, w| (o[w.status] ||= []) << w.id}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句