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

时间:2011-06-27 17:58:00

标签: ruby arrays enumerable

这是我的阵列:

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

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

我该怎么做(将可枚举的每个元素转换为其他元素)?

4 个答案:

答案 0 :(得分:64)

这将有效:

array.map!(&:to_s)

答案 1 :(得分:16)

您可以分别使用mapmap!,第一个将返回一个新列表,第二个将就地修改列表:

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

>> array.map{ |x| x.to_s }
=> ["one", "two", "three"]

答案 2 :(得分:16)

值得注意的是,如果你有一个对象数组,你想单独传递给一个具有不同调用者的方法,如下所示:

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

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

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

如果您不熟悉,method所做的是封装与在Proc中传递给它的符号相关联的方法并返回它。 &符号将此Proc扩展为一个块,它很好地传递给mapmap的返回是一个数组,我们可能想要更好地格式化它,因此join

需要注意的是,与Symbol#to_proc一样,您无法将参数传递给辅助方法。

答案 3 :(得分:7)

  • array.map!(&:to_s)将原始数组修改为['one','two','three']
  • array.map(&:to_s)返回数组['one','two','three']