在 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
哈希值有没有?
我有一个如下所示的散列,我尝试使用以下命令进行提取。我知道可以用不同的方式来完成。但是我不知道是否有以下方法。
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