以最佳方式解析二维数组

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)

有没有更好的方法来达到相同的结果?

Ste*_*fan 6

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)