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

Vla*_*nov 39 ruby arrays enumerable

这是我的阵列:

array = [:one,:two,:three]
Run Code Online (Sandbox Code Playgroud)

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

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

saw*_*awa 66

这将有效:

array.map!(&:to_s)
Run Code Online (Sandbox Code Playgroud)

  • array.map!(&:to_s) - 这也不适用于1.8吗? (2认同)
  • @Andrew谢谢你. (2认同)

mik*_*iku 17

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

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

>> array.map{ |x| x.to_s }
=> ["one", "two", "three"]
Run Code Online (Sandbox Code Playgroud)


cor*_*ard 16

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

# erb
<% strings = %w{ cat dog mouse rabbit } %>
<% strings.each do |string| %>
  <%= t string %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

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

<%= strings.map(&method(:t)).join(' ') %>
Run Code Online (Sandbox Code Playgroud)

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

需要注意的是Symbol#to_proc,您不能将参数传递给辅助方法.


Aru*_*nan 8

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