Ruby Map for hash array using &:

realwol · 发布于 2017年04月30日 · 最后由 quakewang 回复于 2017年04月30日 · 551 次阅读
4933

假设:

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

可以用

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

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

#错误示范
a.map(&:[:aa])
共收到 11 条回复
17671

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

4375

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

17727

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

require 'active_support/core_ext/enumerable'

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

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

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

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

这个会获得所有的value

4933
4375saiga 回复

就是觉得这样写的太多

4933
23529mizuhashi 回复

monkey patch

4933

这个不错👍

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