arrays - Ruby——将嵌套散列转换为多维数组

标签 arrays ruby list dictionary hash

我有一个名为h 的散列。我想将内容存储在名为 ar 的多维数组中。我收到错误 no implicit conversion from nil to integer

这是我的代码:

h = {"bob" => {email: "abc" , tel: "123"} , "daisy" => {email: "cab" , tel: "123456"}}

keys = h.keys

l = h.length 

ar = Array.new(l) { Array.new(3) }

for i in 0..l-1
  ar[[2][i]] = keys[i]
  ar[[1][i]] = h[keys[i]][:email]
  ar[[0][i]] = h[keys[i]][:tel]
end

puts ar.to_s

期望的输出是:

[[email_1, email_2, ..][tel_1, tel_2, ..][name_1, name_2, ..]]

例如:

[["abc", "cab"] , ["123", "123456"] , ["bob", "daisy"]]

最佳答案

这是我处理这个问题的方式:

h.values.each_with_object({}) do |h,obj|
  obj.merge!(h) { |_k,v1,v2| ([v1] << v2).flatten }
end.values << h.keys
#=> [["abc", "cab"], ["123", "123456"], ["bob", "daisy"]]
  • 首先获取所有(作为哈希)
  • 使用累加器 ({}) 遍历它们
  • merge! 将值放入累加器并在发生冲突时将它们追加到 array
  • 从累加器返回
  • 然后附加原始

这不如@mudasobwa 的回答明确,并且依赖于第一个 value 的顺序来确定输出。例如如果 :tel 出现在 :email 之前,前 2 个元素将具有相反的顺序

关于arrays - Ruby——将嵌套散列转换为多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46003044/

相关文章:

css - 跨度类 "mark"中的背景颜色覆盖

java - 尝试在 Java 中打印数组时出现异常

javascript - 如何在 JavaScript 中将键值对数组添加到 Map 中?

python - Python如何查找数组中元素的位置?

ruby - 如何在 VoltRb 中访问页面的 URL

ruby - Sass/Compass 未使用 Guard 和 Middleman 设置进行编译

python - 太多值无法在python中解压缩?

ruby-on-rails - 在 Rails 控制台中使用 fixture finder helpers

java - 在 Java 中将字符串 String 与大型正则表达式列表、性能进行匹配

python - 从文本文件复制完整的句子并添加到列表