我有一个名为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/