我有一系列哈希:
g_list = [
{:groups => [{:id => 5}]},
{:groups => [{:id => 6}]}
]
我需要从结构中获取一组:id
值。我想获得[5, 6]
。
如何迭代哈希数组,以及dig
里面的项目?
我尝试使用map
和dig
:
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
它会返回我的预期,但我想知道我是否可以用更好的方式写出来。
答案 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
键。