Ruby 为什么“join”在数组中不大写字符串?
我正在写一个方法,将字符串中的每个单词大写。不使用Ruby 为什么“join”在数组中不大写字符串?,ruby,Ruby,我正在写一个方法,将字符串中的每个单词大写。不使用join方法,我可以获得正确的数组(例如david copperfield=[“david”,“copperfield”]): 当Ijoin元素时,它们会恢复为小写。我不知道为什么。任何帮助都将不胜感激。使用破坏性版本的map:map: single_words.map! { |i| i.capitalize} 你必须使用地图而不是映射,因为映射返回新数组,而不是更改初始值 def titleize(words) single_word
join
方法,我可以获得正确的数组(例如david copperfield
=[“david”,“copperfield”]
):
当I
join
元素时,它们会恢复为小写。我不知道为什么。任何帮助都将不胜感激。使用破坏性版本的map
:map代码>:
single_words.map! { |i| i.capitalize}
你必须使用地图而不是映射,因为映射返回新数组,而不是更改初始值
def titleize(words)
single_words = words.split(/ /)
single_words.map! {|i| i.capitalize}
single_words.join(" ")
end
join
不会将其取消大写。您抛出了大写的结果,并将原始未大写的数组传递给join
如果您的目的是将由/
分隔的每个子字符串大写,那么更正常、更好的方法是:
def titleize(words)
words.gsub(/[^ ]+/, &:capitalize)
end
我不太清楚您为什么要使用数组。如果您转到文档页面,您会发现它
为self的每个元素调用给定的块一次
创建包含块返回的值的新数组
因此.map
返回新数组,但不修改您提供的数组。这就是为什么您的方法一直有效,而.map
是最后一条指令
要修复代码,您可以将.map
替换为.map代码>,它修改提供的数组(单字)
):
或者将.capitalize
替换为.capitalize代码>,它修改字符串:
def titleize(words)
single_words = words.split(/ /)
single_words.map {|i| i.capitalize!}
single_words.join(" ")
end
或在.map
之后立即执行.join
:
def titleize(words)
single_words = words.split(/ /)
single_words.map {|i| i.capitalize}.join(' ')
end
事实上,您的方法非常简单,只需一行:
def titleize(string)
string.split.map(&:capitalize).join(' ')
end
def titleize(words)
single_words = words.split(/ /)
single_words.map {|i| i.capitalize}.join(' ')
end
def titleize(string)
string.split.map(&:capitalize).join(' ')
end