Ruby Map for hash array using &:

realwol · 2017年04月30日 · 最后由 quakewang 回复于 2017年04月30日 · 1683 次阅读

假设:

a = [{aa: '123'}, {aa: '321'}]

可以用

a.map{ |b| b[:aa] }
=>  ["123", "321"]

不过如果想使用&:的话,该怎么写?想达到的想过如下:

#错误示范
a.map(&:[:aa])

a.map{|h| h.values}.flatten

symbol to proc 没法带参数,可以用 lambda to proc a.map &->(_){_[:aa]},但还不如直接用 block

如果 LZ 只是想少写一些括号的话

require 'active_support/core_ext/enumerable'

[{aa: '123'}, {aa: '321'}].pluck :aa
# => ["123", "321"]

反正Array#to_proc也没人用,自己定义一个就好了

class Array
  def to_proc
    ->(x){ x[first] }
  end
end

p [{aa: 1}, {aa: 2}].map(&[:aa]) #=> [1, 2]
easonlovewan 回复

这个会获得所有的 value

saiga 回复

就是觉得这样写的太多

mizuhashi 回复

monkey patch

这个不错👍

需要 登录 后方可回复, 如果你还没有账号请 注册新账号