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

ker*_*lin 18 ruby

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

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

    return names
  end
Run Code Online (Sandbox Code Playgroud)

Mic*_*ley 53

使用map方法:

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

def recruits_names
  self.referrals.map { |r| r.display_name }
end
Run Code Online (Sandbox Code Playgroud)

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

def recruits_names
  self.referrals.map(&:display_name)
end
Run Code Online (Sandbox Code Playgroud)

对于好奇,这是因为对它后面的对象的&调用to_proc(当在方法调用中使用时),并且Symbol实现to_proc返回一个Proc执行由每个值产生的符号所指示的方法(参见文档).

  • Ruby是如此直观,答案实际上已经包含在问题中:-)"更高效的Ruby方式**地图**属性[...]"你不喜欢那样吗? (7认同)
  • 如果您想要返回多个属性,但不是全部属性,该怎么办? (3认同)