使用#inject连接数组中的字符串

Dar*_*man 10 ruby arrays string inject

我正在上一堂在线课程,通常有一个非常简单的单行解决方案.一个问题表明,给定以下数组:

["emperor", "joshua", "abraham", "norton"]
Run Code Online (Sandbox Code Playgroud)

我必须使用#inject一个字符串,所有名称都用一个字符串连接在一起,每个名称的初始上限,如下所示:

"Emperor Joshua Abraham Norton"
Run Code Online (Sandbox Code Playgroud)

虽然这很容易用#map和完成#join,但这个特殊的练习只需要使用#inject.我提出了这样的事情:

["emperor", "joshua", "abraham", "norton"].inject("") do |memo, word|
   memo << word.capitalize << " "
end
Run Code Online (Sandbox Code Playgroud)

这会给我:

"Emperor Joshua Abraham Norton "
Run Code Online (Sandbox Code Playgroud)

其中字符串末尾的空格不作为正确的解决方案传递.

  • 如何在没有空白的情况下实现这一目标?
  • 这是否是正确的使用方法#inject,传递一个空字符串?
  • 我是否正确使用<<组合字符串?

izo*_*ica 9

试试这个:

a.map{|t| t.capitalize}.join(" ")
Run Code Online (Sandbox Code Playgroud)

我不认为你可以通过注射逃脱额外的空间.你还需要做

memo = memo + word.capitalize + " " 
Run Code Online (Sandbox Code Playgroud)

编辑:因为声明已经改变,迫使你不要使用连接和映射,这里有一个有点难看的解决方案与注入:

a.inject("") do |memo, world|
  memo << " " unless memo.empty?
  memo << word.capitalize
end
Run Code Online (Sandbox Code Playgroud)