嵌套哈希到嵌套数组:如何访问单个值

时间:2018-03-28 17:06:51

标签: ruby

我提前为新手问题道歉!

我有以下嵌套哈希,并希望将其转换为嵌套数组,并能够使用其索引访问各个值。

vehicles = {
    car: { type: 'sedan', color: 'red', year: 2007 },
  }

我试图在下面用几种不同的方式做到这一点,但是,我无法使用其索引访问单个值,例如“sedan”。我的问题是1)如何访问每个解决方案中的单个元素? 2)是否建议我使用.map或to_a以备将来使用?

 car_array1 = vehicles.to_a
 # => [[:car, {:type=>"sedan", :color=>"red", :year=>2007}]] 

 car_array2 = []
 vehicles.map { |k, v| car_array2 << [k, v] }
 # => [[[:car, {:type=>"sedan", :color=>"red", :year=>2007}]]] 

 puts 'car_array1:'
 p car_array1[0][1]
 # {:type=>"sedan", :color=>"red", :year=>2007}

 puts '-' * 10 

 puts 'car_array2'
 p car_array2[0][1]
 # {:type=>"sedan", :color=>"red", :year=>2007}

2 个答案:

答案 0 :(得分:3)

您的问题不明确,但根据您的评论,您需要以下内容:

vehicles[:car].to_a

产生这个:

[[:type, "sedan"], [:color, "red"], [:year, 2007]]

答案 1 :(得分:1)

vehicles = {
   car: { type: 'sedan', color: 'red', year: 2007 },
 }

这里有一个带嵌套哈希的哈希:vehicles[:car]。当您尝试使用.to_a将其转换为数组时,只转换此哈希的更高级别但不嵌套。要实现您想要的功能,您还可以通过以下方式转换嵌套哈希:

result = vehicles.to_a.map { |v| v.last.to_a }
=> [[[:type, "sedan"], [:color, "red"], [:year, 2007]]]

无论哪种方式,你都没有以正确的方式解决问题。这似乎太奇怪和复杂,但我不知道你的情况,所以......