将方法应用于array / enumerable中的每个元素

这是我的数组

array = [:one,:two,:three] 

我想将to_s方法应用于所有的数组元素,以获得array = ['one','two','three']

我怎么能做到这一点(将枚举的每个元素转换为其他东西)?

4 Solutions collect form web for “将方法应用于array / enumerable中的每个元素”

这将工作:

 array.map!(&:to_s) 

值得注意的是,如果你有一个对象的数组,你想单独传入一个不同的调用方法,像这样:

 # erb <% strings = %w{ cat dog mouse rabbit } %> <% strings.each do |string| %> <%= t string %> <% end %> 

您可以使用method方法结合块扩展行为来简化:

 <%= strings.map(&method(:t)).join(' ') %> 

如果你不熟悉,用什么method封装与传递给它的符号相关联的方法并返回它。 &符将这个Proc扩展成一个块,它被很好地传递给mapmap的返回是一个数组,我们可能想更好地格式化它,因此join

需要注意的是,与Symbol#to_proc ,不能将parameter passing给helper方法。

你可以使用mapmap! 第一个将返回一个新的列表,第二个将在原地修改列表:

 >> array = [:one,:two,:three] => [:one, :two, :three] >> array.map{ |x| x.to_s } => ["one", "two", "three"] 
  • array.map!(&:to_s)将原始数组修改为['one','two','three']
  • array.map(&:to_s)返回数组['one','two','three']
  • 我应该使用别名或alias_method?
  • Ruby,从string中删除最后N个字符?
  • 正则expression式在RoR 4中进行了validation
  • 禁用JS / Ajax请求时ActionController :: InvalidAuthenticityToken
  • 创build目录如果它不存在与Ruby
  • 找不到文件'jquery-ui'
  • 如何在运行时find方法的定义?
  • 拆分不同的换行符
  • 导轨forms的单选button的标签
  • 如何使用deviselogin用户?
  • ZSH抱怨RVM __rvm_cleanse_variables:找不到函数定义文件