Индекс ноль в каждом л oop (Ruby) - PullRequest
0 голосов
/ 06 апреля 2020

Итак, я пытаюсь создать небольшую функцию titleize. Он принимает строку, разделяет ее пробелами на массив и, если это квалифицирующее слово (первое слово или любые слова, не являющиеся одним из следующих: the и over), использует заглавные буквы перед объединением массива с пробелами. ,

Я просмотрел несколько руководств в стиле Ruby, и они предостерегают от использования циклов for / while в пользу языков, встроенных во времена и каждый цикл. Поскольку область моей проблемы требует, чтобы индекс и массивы были итеративными и индексируемыми в Ruby, я попытался использовать циклы each с двумя аргументами, item и index. Моя проблема в том, что мой индекс ноль (я проверял это). Мой синтаксис неправильный или я что-то упустил? Я осмотрелся онлайн и не смог найти ничего, касающегося этого, а также похожих вопросов. Это мой первый вопрос, и я хотел бы заранее извиниться, если что-то упустил из правил при создании этого поста.

Что нужно сделать: «мост через реку квай» -> «мост через Река Квай "Что делает:" Мост через реку Квай "->" Мост через реку Квай "

def titleize(string)
  words = string.split
  capitalized_words = []
  words.each do |word, index|
    #adds words if they are the first word or not one of the following: and, the, over
    if(!(word == "and" || word == "the" || word == "over") || index == 0)
      capitalized_words.push(word.capitalize)
    else
      capitalized_words.push(word)
    end
  end
  capitalized_words.join(" ")
end

1 Ответ

0 голосов
/ 06 апреля 2020

each не дает вам индекс. Попробуйте с each_with_index

words.each_with_index do |word, index|

В любом случае, я бы сделал это так

TO_NOT_CAPITALIZE =  %w(and the over)

def titleize(string)
  string.split.each_with_index.map do |word, index| 
    index.zero? || !TO_NOT_CAPITALIZE.include?(word) ? word.capitalize : word 
  end.join(' ')
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...