我正在创建一个简单的分析图表,为了避免实时大量查询,我需要将缓存的结果数据集保存在专用于这些统计信息的表中。
任何用户尝试一些类(class),我想使用状态保存类(class)的 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]]]
如何在第一次迭代时创建数组并将其保留在 map 内?
最佳答案
您可以尝试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}
关于arrays - Ruby:将数组映射到哈希,在哈希内创建一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38384083/