如何从红宝石的哈希嵌套数组中获取数据?

时间:2018-08-05 11:29:35

标签: ruby-on-rails arrays ruby hash

我有一个像这样的数组:

array = [:a, b: [:c, :d]]
 => [:a, {:b=>[:c, :d]}] 

当我尝试使用数组[:b]时,出现此错误:

TypeError (no implicit conversion of Symbol into Integer)

如何从此数组中获取:b元素?

注意:我不想使用索引来做到这一点(array [1])。

3 个答案:

答案 0 :(得分:1)

由于它是array(而不是哈希),因此可以通过其索引获取元素。在此示例中:

array[1]
#=> { :b => [:c, :d] }

答案 1 :(得分:1)

  

注意:我不想使用索引来做到这一点(array [1])。

environment.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)

> array.find{|e| e.is_a?(Hash) && e.has_key?(:b)}
#=> {:b=>[:c, :d]}

对于您的特定示例:

> array.find{|e| e.has_key?(:b) rescue false}
#=> {:b=>[:c, :d]}

答案 2 :(得分:0)

我认为这是解决方案

array.last[:b]

在这种类型的数组中,所有(键:val)值将作为哈希存储在数组的最后一个元素上

例如:

array = [:a, :b, c: [:d], e: [:f], g: [:h]]
 => [:a, :b, {:c=>[:d], :e=>[:f], :g=>[:h]}] 

我可以通过以下方式访问:c元素:

array.last[:c]
 => [:d] 

array.select{|x| x.instance_of?(Hash)}.last[:c]
 => [:d]