我怎样才能大写数组的每个元素?

如何将元素数组转换为大写? 预期产出将是:

["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"] => ["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY"] 

以下不起作用,并将它们作为小写。

 Day.weekday.map(&:name).each {|the_day| the_day.upcase } => ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"] 

返回一个新数组

如果要返回大写数组,请使用#map

 array = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"] # Return the uppercased version. array.map(&:upcase) => ["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY"] # Return the original, unmodified array. array => ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"] 

如您所见,原始数组未被修改,但您可以在任何可以使用表达式的地方使用#map的大写返回值。

正确更新arrays

如果要在适当的位置大写数组,请使用#map! 代替:

 array = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"] array.map!(&:upcase) array => ["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY"] 

这应该工作:

 Day.weekday.map(&:name).map(&:upcase) 

或者,如果您想节省一些CPU周期

 Day.weekday.map{|wd| wd.name.upcase} 

在您的示例中,将“each”替换为“map”。

虽然’each’遍历数组,但它不会创建包含块返回的值的新数组。