从哈希数组哈希中获取id

时间:2018-05-10 09:58:05

标签: ruby hash

我有一系列哈希:

g_list = [
  {:groups => [{:id => 5}]},
  {:groups => [{:id => 6}]}
]

我需要从结构中获取一组:id值。我想获得[5, 6]

如何迭代哈希数组,以及dig里面的项目?

我尝试使用mapdig

g_list.map{|g| g.dig(:groups, :id)}

但收到错误TypeError: no implicit conversion of Symbol into Integer。我还尝试使用each循环处理它,以获取组的单个示例:

g_list.each do |g|
   groups = g.dig(:groups)
   puts groups[:id]
end

但我仍然得到同样的错误。我终于写了这个:

arr = g_list.map {|g| g.dig(:groups).map{|i| i[:id]}}.flatten

它会返回我的预期,但我想知道我是否可以用更好的方式写出来。

2 个答案:

答案 0 :(得分:3)

数组索引可以作为参数的一部分传递给dig调用。您希望索引0从数组中提取单个元素。

g_list.map{|g| g.dig(:groups, 0, :id)}
# => [5, 6]

答案 1 :(得分:0)

以下内容返回包含所有组ID的列表,即使元素包含多个组也是如此。

g_list = [
  {:groups => [{:id => 5}]},
  {:groups => [{:id => 6}]}
]

arr = g_list.flat_map { |g| g[:groups] }.map { |i| i[:id] }
arr #=> [5, 6]

g_list = [
  {:groups => [{:id => 5}]},
  {:groups => [{:id => 6}, {:id => 7}]}
]

arr = g_list.flat_map { |g| g[:groups] }.map { |i| i[:id] }
arr #=> [5, 6, 7]

假设所有元素都有一个:groups键。

相关问题