我试图将多个单词的字符串中的每个单词颠倒。例如:保留单词顺序的单词中的反转字符
“喜怎么了”=> “IH stahw PU”
如我已经得到这是接近:
def backwards(s)
s.split.each do |y| y.reverse! end
end
事情是该返回一个数组,不是一个字符串。我试过在reverse!
之后加入join(' ')
,但那给了我一个错误。
我试图将多个单词的字符串中的每个单词颠倒。例如:保留单词顺序的单词中的反转字符
“喜怎么了”=> “IH stahw PU”
如我已经得到这是接近:
def backwards(s)
s.split.each do |y| y.reverse! end
end
事情是该返回一个数组,不是一个字符串。我试过在reverse!
之后加入join(' ')
,但那给了我一个错误。
str.split(' ').map{|w| w.reverse}.join ' '
清洁版本:
str.split.map(&:reverse).join ' '
+1仍然使用'map(&:reverse)'我认为更好。也不需要通过''''作为参数来分割。 – 2013-02-11 10:26:24
你应该这样做:
def backwards(str)
str.split.map(&:reverse).join(' ')
end
你想加入each
的结果,reverse!
没有结果。您需要:
s.split.each {|y| y.reverse!}.join ' '
你几乎得到它的权利...你必须调用join(' ')
该块
def backwards(s)
s.split.map { |word| word.reverse }.join(' ')
end
不知道人们为什么坚持使用split
的结果。
s.gsub(/\w+/, &:reverse)
当然,我不会想到一个,我喜欢它。 – thomasfedb 2013-02-11 13:56:26
因为'split'更具可读性和更快速http://ideone.com/6mJwCq – Hauleth 2013-02-11 15:16:43
@ŁukaszNiemier为了便于阅读,我认为使用'gsub'更直接。它直接表达了这个概念:“扭转这些词”。为什么你需要说“分成单词,反向和加入”?此外,它使用更少的方法,这也意味着它更直接。至于速度,你使用'split'的版本更快,因为你没有给它一个参数。如果你想要很好的控制(即不是通过'“”分割),那么你需要执行split(/ \ W + /)或类似的操作,这使'split'比'gsub'更慢。 – sawa 2013-02-11 15:59:03
你为什么这样做?这听起来像是一项家庭作业。 – 2013-02-11 15:17:33