我有以下哈希数组:
arr = [
{ most_accessed: [1,2,3]},
{ most_voted: [1,2]}
]
我需要通过密钥获取哈希值。 我正在尝试:
arr.map{|x| x[:most_accessed]}
但结果是:nil
我该怎么做?
答案 0 :(得分:2)
这是XY problem:您的原始数据格式不正确。它应该是一个哈希,而不是哈希数组。
虽然即使对于这个输入也有一些方法:
arr.map { |e| e[:most_accessed] }.compact
arr.detect { |e| e[:most_accessed] }[:most_accessed]
arr.group_by { |e| e[:most_accessed] }.keys.compact
但是,请考虑首先从数据中创建一个正确的哈希,然后处理它:
arr.each_with_object({}) do |h, acc|
acc.merge!(h) { |k, v1, v2| v1 | v2 } # or v1 + v2
end[:most_accessed]
答案 1 :(得分:1)
nil
键的结果是most_voted
,因为你正在遍历数组中的每个哈希,只有一个名为most_accessed
的键,如果你想要每个值键,然后您可以使用values
:
arr = [
{ most_accessed: [1,2,3]},
{ most_voted: [1,2]}
]
p arr.map { |hash| hash[:most_accessed] } # [[1, 2, 3], nil]
p arr.map &:values # [[[1, 2, 3]], [[1, 2]]]
p arr.flat_map &:values # [[1, 2, 3], [1, 2]]
p arr.inject(:merge)[:most_accessed] # [1, 2, 3]
p arr.inject(:merge)[:most_voted] # [1, 2]