arrays - Ruby:将数组映射到哈希,在哈希内创建一个数组

标签 arrays ruby hash

我正在创建一个简单的分析图表,为了避免实时大量查询,我需要将缓存的结果数据集保存在专用于这些统计信息的表中。

任何用户尝试一些类(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}

reduce/inject :

u.courses.reduce({}){|o, w| (o[w.status] ||= []) << w.id}

关于arrays - Ruby:将数组映射到哈希,在哈希内创建一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38384083/

相关文章:

ruby - 如何在 ruby​​ 中显示 ascii 艺术字符串?

ruby - 数组乘法 - 什么是最好的算法?

java - 我应该如何使用 google guava hashCode() 调用 super.hashcode

azure - 重新实现 uniqueString() 哈希 ARM 函数

arrays - 数组未从 For Loop VBA 填充

javascript - 为什么在 javascript 中的 JSON 对象数组中创建一个额外的数组数组

javascript - Jquery 无法访问循环外的数组

arrays - 为什么我的状态数组重置为空?

ruby - 错误信息 : -bash:/etc/profile. d/rvm.sh: 没有那个文件或目录

java - 如何将数组插入哈希表而无需在 Java 中进行初始化?