vis*_*nth 4 ruby arrays hash multidimensional-array
我需要解析2d数组的以下哈希,其中第一个数组具有键,其余数组具有值。
input = {
"result": [
[
"id",
"name",
"address"
],
[
"1",
"Vishnu",
"abc"
],
[
"2",
"Arun",
"def"
],
[
"3",
"Arjun",
"ghi"
]
]
}
Run Code Online (Sandbox Code Playgroud)
这是我想出的结果。
input[:result].drop(1).collect{|arr| Hash[input[:result].first.zip arr]}
Run Code Online (Sandbox Code Playgroud)
在这里,我在遍历result数组时忽略了它的第一个子数组(包含键的那个),然后zip是键数组和值数组以进行哈希处理,然后将哈希收集到另一个数组中。
上面的解决方案给我我想要的是一个哈希
[{"id"=>"1", "name"=>"Vishnu", "address"=>"abc"}, {"id"=>"2", "name"=>"Arun", "address"=>"def"}, {"id"=>"3", "name"=>"Arjun", "address"=>"ghi"}]
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来达到相同的结果?
zip 是这里的正确工具,因此您的代码很好。
我将使用Ruby的数组分解功能来提取键和值,而to_h不是Hash[]:
keys, *values = input[:result]
values.map { |v| keys.zip(v).to_h }
Run Code Online (Sandbox Code Playgroud)
或者,如果您更喜欢“单线” :(很难理解IMO)
input[:result].yield_self { |k, *vs| vs.map { |v| k.zip(v).to_h } }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |