我对ruby知之甚少,我的以下实现工作正常,但我真的觉得这种方法很有意义
@surfaces = []
Surface.all.each do |surface|
@surfaces << surface.name
end
目的是提取每个表面对象的名称值并将它们组成一个数组,有人能告诉我这样做的聪明方法吗?感谢
答案 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?