如何将元素数组转换为大写?预期的产出将是:
["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"]
答案 0 :(得分:55)
如果要返回大写数组,请使用 #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的大写返回值。
如果您想要在适当的位置大写数组,请改为使用 #map!:
array = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]
array.map!(&:upcase)
array
=> ["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY"]
答案 1 :(得分:6)
这应该有效:
Day.weekday.map(&:name).map(&:upcase)
或者,如果你想节省一些CPU周期
Day.weekday.map{|wd| wd.name.upcase}
答案 2 :(得分:4)
在您的示例中,将“each”替换为“map”。
虽然'each'遍历数组,但它不会创建包含块返回值的新数组。