在 rails 中采摘哈希

Pluck hash in rails

哈希值有没有?

我有一个如下所示的散列,我尝试使用以下命令进行提取。我知道可以用不同的方式来完成。但是我不知道是否有以下方法。

hash = {"0"=>{"user_id"=>"1"}, "0"=>{"user_id"=>"2"}}
hash.pluck("user_id")

这应该有效

hash.inject([]) do |acc, el| 
  acc << el.last.try(:[], 'user_id').to_i
  acc
end

这是结果

[38] pry(main)> hash.inject([]){|acc, el| acc << el.last.try(:[], 'user_id').to_i; acc}
=> [1, 2]

但它仅适用于您提供的散列。

或者你可以猴子修补哈希 class 有:

# config/initializers/hash.rb
class Hash
  def hash_pluck(key)
    self.inject([]){|acc, el| acc << el.last.try(:[], key).to_i; acc}
  end
end

然后在哈希上调用它

[2] pry(main)> hash.hash_pluck('user_id')
=> [1, 2]

你能做的最好是一个简单的 map

hash = {"0"=>{"user_id"=>"1"}, "1"=>{"user_id"=>"2"}}
hash.values.map{|h| h['user_id']} # => ["1", "2"]

如果需要,您甚至可以将其添加到 Array 作为您的 pluck 方法。当然,"you can" 并不意味着 "you should" :)

ActiveSupport 添加 pluck to Enumerable