0

我对 ruby​​ 知之甚少,我的以下实现很有效,但我真的觉得这种方法有些限制

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

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

4

3 回答 3

3

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

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

Surface.all.collect do |s|
  s.name
end
于 2012-12-29T12:25:09.047 回答
2

用于Enumerable#map通过元素的一对一映射将一个可枚举转换为另一个可枚举。Symbol#to_proc当映射涉及对输入可枚举的每个元素简单地调用单个方法时,结合使用。

这两个是等价的:

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

@surfaces = Surface.all.map do |surface|
  surface.name
end
于 2012-12-29T12:25:41.667 回答
1

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

这是堆栈流参考:Ruby 中 map 和 collect 的区别?

于 2012-12-29T19:39:02.023 回答