【问题标题】:how can fetch data from hash nested array in ruby?如何从 ruby​​ 中的哈希嵌套数组中获取数据?
【发布时间】:2018-08-05 11:29:34
【问题描述】:

我有一个类似的数组:

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

当我尝试使用 array[:b] 时,我得到了这个错误:

TypeError (no implicit conversion of Symbol into Integer)

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

注意:我不想使用索引来执行此操作(数组 [1])。

【问题讨论】:

  • 你为什么不想以通常的方式索引一个?您是否尝试在数组中搜索带有 :b 键的散列元素?

标签: ruby-on-rails arrays ruby hash


【解决方案1】:

因为它是array(而不是哈希),所以您可以通过索引获取元素。在这个例子中:

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

【讨论】:

  • 谢谢。但我想用键而不是索引来获取它我该怎么做?
【解决方案2】:

注意:我不想使用索引来执行此操作(数组 [1])。

> 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]}

对于您的具体示例:

> Hash[*array][:a][:b]
#=> [:c, :d] 

【讨论】:

    【解决方案3】:

    我认为这是解决方案

    array.last[:b]
    

    在这种类型的数组中,所有 (key: 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]
    

    【讨论】:

      猜你喜欢
      • 2020-04-22
      • 2016-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-28
      • 2020-01-30
      • 1970-01-01
      • 2019-11-21
      相关资源
      最近更新 更多