fred = [ 4, 9, 18, 3, 87, 9, 12 ]
alex = [ 'Susan', 'Joe', 'Alex', 'Alice', 'Sam' ]
# Compute a new array with each member of fred doubled.
fred = fred.map { |x| 2 * x }
print fred.join(" "), "\n"
# Create a new alex adding " went away" to each member. Then join and
# print the result.
print (alex.map { |z| z + " went away" }).join(" "), "\n"
# Print the members of fred which are more than five and less than 20.
print (fred.select { |z| z > 5 && z < 20 }).join(" "), "\n"
# Print the lengths of the members of alex that start with A or end with e.
print ((alex.select { |n| n =~ /^A/ || n =~ /e$/ }).map { |z| z.length }).
join(" "), "\n"
# Update alex by surround each of its members with [ ]
alex.map! { |a| "[" + a + "]" }
print alex.join(" "), "\n"
The built-in
Array
class contains a number of iterators
which work on the entire list and return a list result.
Two important ones are
map
, which runs the code block
on each member of the list, and returns the list of results from
those operations. The other is
select
, which also runs a code
block on each member of the list. This block should return a boolean,
and a new list is build of only those members for which the code block
produces true. The code block can be thought of as a filter which
decides, for each member, if it should be retained.
The plain forms, map
and select
return a new array.
The emphatic forms, map!
and select!
update the list.