2016-02-23 3 views
0

Я пытаюсь заглавные буквы каждой буквы в массиве, который является гласным. У меня есть:Заглавные буквы каждой буквы в массиве, который является гласным

vowels = ["a", "e", "i", "o", "u"] 

и если vowels включает характер, то я UPCASE его. Я сделал:

["a", "b", "c"].each do |char| 
    if vowels.include?(char) 
    char.upcase 
    end 
end 

но оно возвращает ["a", "b", "c"]. Что я здесь делаю неправильно?

ответ

5

Вы создаете новую строку с upcase и выбрасываете ее. Для преобразования строки в верхний регистр необходимо использовать upcase!.

["a", "b", "c"].each do |char| 
    if vowels.include?(char) 
    char.upcase! 
    end 
end 
1

Использовать map вместо each. each оценит блок, но отбросит результат. Вот почему вы получаете ["a", "b", "c"] или содержимое исходного массива, который вы хотите проверить на гласные.

vowels = ["a", "e", "i", "o", "u"] 
["a", "b", "c"].map do |char| 
    char.upcase if vowels.include?(char) 
end.compact 

map создает новый массив, где каждый элемент является результатом возвращается блоком. compact удалит любые значения nil или те, которые не являются гласными (блок не вернул true).

+2

Это преобразует '' '' в '' A "', но также удаляет '' b ''и' 'c" '. – Stefan

+1

@Stefan это правда, хотя непонятно из первоначального вопроса, что пользователь хочет делать с не соответствующими значениями. – Mohamad

Смежные вопросы