Ruby 保留单词顺序的单词中的反向字符

Ruby 保留单词顺序的单词中的反向字符,ruby,Ruby,我试着在一个由多个单词组成的字符串中反转每个单词的单词。例如: “你好,有什么事吗”=>“我是史塔夫·普” 这是我得到的最接近的结果: def backwards(s) s.split.each do |y| y.reverse! end end 问题是它返回的是数组,而不是字符串。我尝试在反向之后添加join(“”)但这给了我一个错误 str.split(' ').map{|w| w.reverse}.join ' ' 清洁版: str.split.map(&:reverse)

我试着在一个由多个单词组成的字符串中反转每个单词的单词。例如:

“你好,有什么事吗”=>“我是史塔夫·普”

这是我得到的最接近的结果:

def backwards(s)
  s.split.each do |y| y.reverse! end
end
问题是它返回的是数组,而不是字符串。我尝试在
反向之后添加
join(“”)
但这给了我一个错误

str.split(' ').map{|w| w.reverse}.join ' '
清洁版:

str.split.map(&:reverse).join ' '
清洁版:

str.split.map(&:reverse).join ' '
你应该做:

def backwards(str)
  str.split.map(&:reverse).join(' ')
end
你应该做:

def backwards(str)
  str.split.map(&:reverse).join(' ')
end

您想要加入每个
的结果,而不是
反向的结果。你需要:

s.split.each {|y| y.reverse!}.join ' '

您想要加入每个
的结果,而不是
反向的结果。你需要:

s.split.each {|y| y.reverse!}.join ' '

你几乎把它做好了。。。您必须对块的结果调用
join(“”)

def backwards(s)
  s.split.map { |word| word.reverse }.join(' ')
end

你几乎把它做好了。。。您必须对块的结果调用
join(“”)

def backwards(s)
  s.split.map { |word| word.reverse }.join(' ')
end

不知道为什么人们坚持使用
split

s.gsub(/\w+/, &:reverse)

不知道为什么人们坚持使用
split

s.gsub(/\w+/, &:reverse)

+我认为仍然使用
map(&:reverse)
更好。也不需要将
'
作为参数传递给split。我认为+1仍然使用
map(&:reverse)
更好。也不需要将
'
作为参数传递给split。当然,我不会想到,我喜欢它。@ukaszNiemier为了可读性,我认为使用
gsub
更简单。它直接表达了这个概念:“颠倒词语”。你为什么要说“拆分成单词、反转和连接”?而且,它使用的方法更少,这也意味着它更直接。至于速度,使用
split
的版本更快,因为您没有给它一个参数。如果你想要精细的控制(即,不仅仅是通过
”分割),那么你需要做
分割(/\W+/)
或者类似的事情,这使得
分割比
gsub
慢。当然是我想不到的,我喜欢。@ukaszNiemier为了可读性,我认为使用
gsub
要简单得多。它直接表达了这个概念:“颠倒词语”。你为什么要说“拆分成单词、反转和连接”?而且,它使用的方法更少,这也意味着它更直接。至于速度,使用
split
的版本更快,因为您没有给它一个参数。如果您想要精细控制(即,不只是通过
”分割),那么您需要执行
分割(/\W+/)
或类似操作,这使得
分割
gsub
慢。您为什么要这样做?听起来像是家庭作业。你为什么要这样做?听起来像是家庭作业。