首页 > 解决方案 > Ruby - 我在将数组中的特定单词大写时遇到困难,这些单词将作为字符串返回

问题描述

我一天中的大部分时间都在为此工作,我可以让“大卫科波菲尔”以“大卫科波菲尔”的身份回归,但我无法让“桂河上的桥”以“The桂河大桥”。
这是我的代码:

def titleize(title)
  titleArray = title.split(/ /)
  capitalized = []
  i = 0
  while i < titleArray.length do #I wanted to do some sort of comparison here with an && 
    if i == 0 
      capitalized << titleArray[i].capitalize 
    else 
      capitalized << titleArray[i]
    end
    
    i += 1
  end

  puts titleArray.inspect
  puts capitalized.to_s
end

titleize("david copperfield")
titleize("the bridge over the river kawi")

我应该忽略另一组单词吗?( the, and, but, of...etc) 如果是这样,有人可以提醒我如何比较两个数组吗?

标签: arraysrubycomparison

解决方案


这是对您的代码的最小更改,以使其正常工作:

EXCLUDED_WORDS = ['over', 'the']

def titleize(title)
  titleArray = title.split(/ /)
  capitalized = []
  i = 0

  while i < titleArray.length do
    if i == 0 || !EXCLUDED_WORDS.include?(titleArray[i])
      capitalized << titleArray[i].capitalize 
    else
      capitalized << titleArray[i]
    end
    
    i += 1
  end

  titleArray.join(' ')
end

这是同一事物的更红宝石风格的版本:

EXCLUDED_WORDS = ['over', 'the']

def titleize(title)
  title.split(/ /).map.with_index do |i, word|
    if i == 0 || !EXCLUDED_WORDS.include?(word)
      word.capitalize 
    else
      word
    end
  end.join(' ')
end

推荐阅读