我有三个数组的集合。
每个数组都有这种结构:
Array > Array > Hash
如何才能最有效地获得三个哈希值中某个键的值?
更新
当前代码:
collection.map{|c| c[0]}.map{|cc| cc[1]}.map{|ccc| ccc[:my_key]}
答案 0 :(得分:1)
你可以一次性完成:
collection.map{|c| c.first.second[:my_key] }
至于是否有更清洁的方式 - 这取决于这个集合代表什么,如何获得等等。我们有太少的信息来帮助你进一步清理它。
答案 1 :(得分:1)
您可以使用flatten
简单地将其设为哈希数组,然后在其中搜索密钥。
collection.flatten.select{|key, value| key == :my_key}.map{|k,v| v}
答案 2 :(得分:1)
你也可以试试这个:
collection.map { |(_,second,_),_| second[:my_key] }
这将获取集合中每个项目的第一个元素的第二个元素,并返回其中的my_key
键。
collection = [[[{my_key: 1, yyy: 'zzz'},{my_key: 2, yyy: 'yyy'}],
[{my_key: 3, yyy: 'zzz'},{my_key: 4, yyy: 'yyy'}]],
[[{my_key: 5, yyy: 'zzz'},{my_key: 6, yyy: 'yyy'}, {my_key: 7, yyy: 'zzz'}],
[{my_key: 8, yyy: 'zzz'},{my_key: 9, yyy: 'yyy'}]]]
collection.map { |(_,second,_),_| second[:my_key] }
# => [2, 6]