This is my array:
array = [:one,:two,:three]
I want to apply to_s method to all of my array elements to get array = ['one','two','three'].
How can I do this (converting each element of the enumerable to something else)?
This is my array:
array = [:one,:two,:three]
I want to apply to_s method to all of my array elements to get array = ['one','two','three'].
How can I do this (converting each element of the enumerable to something else)?
This will work:
array.map!(&:to_s)
collect and collect! are aliases for map and map!.! for?! is part of the method name, no magic, but it's used to tell you it defines the changed value to self instead of just returning the changed value: stackoverflow.com/a/612196/540447It's worth noting that if you have an array of objects you want to pass individually into a method with a different caller, like this:
# erb
<% strings = %w{ cat dog mouse rabbit } %>
<% strings.each do |string| %>
<%= t string %>
<% end %>
You can use the method method combined with block expansion behavior to simplify:
<%= strings.map(&method(:t)).join(' ') %>
If you're not familiar, what method does is encapsulates the method associated with the symbol passed to it in a Proc and returns it. The ampersand expands this Proc into a block, which gets passed to map quite nicely. The return of map is an array, and we probably want to format it a little more nicely, hence the join.
The caveat is that, like with Symbol#to_proc, you cannot pass arguments to the helper method.
array.map!(&:to_s) modifies the original array to ['one','two','three']array.map(&:to_s) returns the array ['one','two','three'].