更高效的Ruby方法将对象数组中的属性映射到另一个数组?

时间:2011-03-07 05:45:19

标签: ruby

我不会在这里重复我的问题,但有更有效的方式来写这个吗?

  def recruits_names
    names = []
    for r in self.referrals do
      names << r.display_name
    end

    return names
  end

1 个答案:

答案 0 :(得分:51)

使用map方法:

  

为枚举中的每个元素返回一个新数组,其中包含一次运行块的结果。

def recruits_names
  self.referrals.map { |r| r.display_name }
end

[更新]正如Staelen在评论中指出的那样,这个例子可以进一步缩短为:

def recruits_names
  self.referrals.map(&:display_name)
end

对于好奇,这是因为&在其后面的对象上调用to_proc(在方法调用中使用时),而Symbol实现to_proc以返回Proc执行由每个值上的符号指示的方法产生的块(参见the documentation)。