如何从对象列表中形成一个数组

时间:2012-12-29 12:22:57

标签: ruby

我对ruby知之甚少,我的以下实现工作正常,但我真的觉得这种方法很有意义

@surfaces = []
Surface.all.each do |surface|
    @surfaces << surface.name
end

目的是提取每个表面对象的名称值并将它们组成一个数组,有人能告诉我这样做的聪明方法吗?感谢

3 个答案:

答案 0 :(得分:3)

您可以使用Surface.all.collect(&:name)

编辑:这相当于做这样的事情:

Surface.all.collect do |s|
  s.name
end

答案 1 :(得分:2)

使用Enumerable#map将一个可枚举变为另一个枚举,并使用1对1的元素映射。当映射涉及简单地在输入可枚举的每个元素上调用单个方法时,与Symbol#to_proc组合。

这两个都是等价的:

@surfaces = Surface.all.map(&:name)

@surfaces = Surface.all.map do |surface|
  surface.name
end

答案 2 :(得分:1)

仅供参考,在Ruby中收集并将别名映射到相同的内部模式。

这是stackflow引用:Difference between map and collect in Ruby?