Как я могу загладить каждый элемент массива? - программирование

Как я могу загладить каждый элемент массива?

Как преобразовать массив элементов в верхний регистр? Ожидаемый результат:

["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"] 
4b9b3361

Ответ 1

Возвращает новый массив

Если вы хотите вернуть массив с верхним регистром, используйте #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"]

Ответ 2

Это должно работать:

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

Или, если вы хотите сохранить некоторые циклы процессора

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

Ответ 3

В вашем примере замените "каждый" на "map".

В то время как "каждый" выполняет итерацию через ваш массив, он не создает новый массив, содержащий значения, возвращаемые блоком.