16

在这段代码中:

arr = [ { id: 1, body: 'foo'}, { id: 2, body: 'bar' }, { id: 3, body: 'foobar' }]
arr.map { |h| h[:id] } # => [1, 2, 3]

有没有一种更简洁的方法可以从这样的哈希数组中获取值?

Underscore.js 有 pluck,我想知道是否有 Ruby 等价物。

4

2 回答 2

28

如果你不介意猴子补丁,你可以自己去采摘:

arr = [{ id: 1, body: 'foo'}, { id: 2, body: 'bar' }, { id: 3, body: 'foobar' }]

class Array
  def pluck(key)
    map { |h| h[key] }
  end
end

arr.pluck(:id)
=> [1, 2, 3]
arr.pluck(:body)
=> ["foo", "bar", "foobar"]

此外,看起来有人已经为 Enumerables 推广了这一点,而其他人则为更通用的解决方案推广了这一点。

于 2013-11-14T00:51:27.123 回答
12

现在导轨支持Array.pluck开箱即用。这个PR已经实现了

它被实现为:

def pluck(key)
  map { |element| element[key] }
end

所以没有必要再定义它了:)

于 2018-08-06T10:13:12.177 回答