Делайте каждое слово в массиве заглавными

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

array = ["the dog", "the cat", "new york"]

Я пробовал использовать:

array.map(&:capitalize)

но это только первая буква каждой строки. Какие-либо предложения? (Я новичок в программировании ^ _ ^)

Мой желаемый результат:

["The Dog", "The Cat", "New York"]

person Steven Visser    schedule 03.09.2020    source источник
comment
Для тех, кто пользуется рельсами: ["the dog", "the cat", "new york"].map(&:titleize)   -  person benjessop    schedule 03.09.2020


Ответы (3)


В документации для String#capitalise говорится:

Возвращает копию str с первым символом, преобразованным в верхний регистр, а остаток в нижний регистр.

Это не то, что вы пытаетесь сделать. Поэтому вам нужно вместо этого написать что-то нестандартное.

Например:

array.map { |string| string.gsub(/\b[a-z]/, &:upcase) }

Я не понимаю, планируете ли / как вы обрабатывать другой ввод, такой как заглавные буквы, слова с дефисом или несколько строк ... Но если ваши требования станут более подробными, вам, возможно, придется расширить эту реализацию.

person Tom Lord    schedule 03.09.2020
comment
Хороший ответ. У некоторых новичков в Ruby могут возникнуть проблемы с &:upcase. Вы можете уточнить. - person Cary Swoveland; 03.09.2020

Вы можете использовать что-то подобное для каждой строки вашего массива:

string.split(' ').map(&:capitalize).join(' ')
person Paolo Mossini    schedule 03.09.2020
comment
Ваш ответ неполный. Тебе нужно написать, array.map { |string| string.split(' ').map(&:capitalize).join(' ') }. Вы можете предпочесть string.split.map..., так как он разбивается на одно или несколько пробелов. - person Cary Swoveland; 03.09.2020

В качестве альтернативы я бы предпочел использовать Ruby # gsub и сделать его более объектом, которым он может быть reusable каждый раз. Но прежде чем мы перейдем к этому, вы должны прочитать следующие методы String в Ruby:

  1. Метод String # gsub
  2. String # capitalize Method
  3. Прочтите и этот блог, чтобы узнать, как вы можно использовать gsub

Я считаю, что можно использовать методы capitalize и upcase, и вы увидите, как я использовал их в своем решении ниже. Это передаст дополнительные случаи, когда у вас есть camelcase в вашем массиве, а также Hyphen:

# frozen_string_literal: true

def converter(string)
  string.capitalize.gsub(/\b[a-z]/, &:upcase)
end

array_name = ['the Dog', 'the cat', 'new york', 'SlACKoVeRFLoW', 'OlAoluwa-Afolabi']
print array_name.map(&method(:converter))

Как видите, я немного изменил массив. Я посоветую вам использовать string with single-quotes (i.e '') и использовать double-quotes (i.e " ") when you want to do string concatenation.

Примечание.

  1. Я считаю, что мое решение можно расширить. Его можно пересмотреть для всех видов производительности и крайних случаев. Таким образом, вы можете найти такой массив и протестировать с ним, а также расширить решение.
  2. Я использовал Ruby 2.7.1
person Afolabi Olaoluwa Akinwumi    schedule 04.09.2020