从一系列哈希获取项目



我有以下哈希数组:

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

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

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

,但结果是:nil

我该怎么做?

这是一个XY问题:您的原始数据未构成良好。它应该是单个哈希,而不是哈希的数组。

尽管即使在此输入中,也有一些方法:

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]

结果是 most_voted键的 nil,因为您在数组中的每个哈希上迭代时,只有一个键称为 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]

最新更新