从哈希数组中获取项

时间:2017-11-24 16:09:27

标签: arrays ruby hash

我有以下哈希数组:

arr = [
  { most_accessed: [1,2,3]},
  { most_voted: [1,2]}
]

我需要通过密钥获取哈希值。 我正在尝试:

arr.map{|x| x[:most_accessed]}

但结果是:nil

我该怎么做?

2 个答案:

答案 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]