这是我的阵列:
array = [:one,:two,:three]
我想将to_s
方法应用于我的所有数组元素以获取array = ['one','two','three']
。
我该怎么做(将可枚举的每个元素转换为其他元素)?
答案 0 :(得分:64)
这将有效:
array.map!(&:to_s)
答案 1 :(得分:16)
您可以分别使用map
或map!
,第一个将返回一个新列表,第二个将就地修改列表:
>> 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扩展为一个块,它很好地传递给map
。 map
的返回是一个数组,我们可能想要更好地格式化它,因此join
。
需要注意的是,与Symbol#to_proc
一样,您无法将参数传递给辅助方法。
答案 3 :(得分:7)
array.map!(&:to_s)
将原始数组修改为['one','two','three']
array.map(&:to_s)
返回数组['one','two','three']
。