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

标签 ruby

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

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

    return names
  end

最佳答案

使用 map方法:

Returns a new array with the results of running block once for every element in enum.

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,它在每个产生给 block 的值上执行由符号指示的方法(参见 the documentation)。

关于ruby - 将对象数组中的属性映射到另一个数组的更有效的 Ruby 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5216275/

相关文章:

ruby - 我如何遍历一组数字,做一些加法并追加到数组?

ruby-on-rails - 为投票系统找出/重构这个 if/else

ruby - 为什么语法突出显示不适用于 Chrome Devtools 中的 Ruby 文件 (.erb)?

ruby - 无法将 Ruby block cat 到文件

ruby - rvm 不是函数

ruby - 打印到标准输出的单元测试顺序

ruby-on-rails - 在 Rails 中获取 CSV 文件

ruby-on-rails - "Append"两个不同的ActiveRecord::Relation 变成一个ActiveRecord::Relation

ruby - 如果 RVM 二进制文件可以作为函数运行,它的用途是什么?

ruby-on-rails - `end_with?' :String (NoMethodError) 的未定义方法 "no such file to load -- Win32API"