2013-02-11 145 views
1

我试图将多个单词的字符串中的每个单词颠倒。例如:保留单词顺序的单词中的反转字符

“喜怎么了”=> “IH stahw PU”

如我已经得到这是接近:

def backwards(s) 
    s.split.each do |y| y.reverse! end 
end 

事情是该返回一个数组,不是一个字符串。我试过在reverse!之后加入join(' '),但那给了我一个错误。

+0

你为什么这样做?这听起来像是一项家庭作业。 – 2013-02-11 15:17:33

回答

5
str.split(' ').map{|w| w.reverse}.join ' ' 

清洁版本:

str.split.map(&:reverse).join ' ' 
+2

+1仍然使用'map(&:reverse)'我认为更好。也不需要通过''''作为参数来分割。 – 2013-02-11 10:26:24

2

你应该这样做:

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

你想加入each的结果,reverse!没有结果。您需要:

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

你几乎得到它的权利...你必须调用join(' ')该块

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

不知道人们为什么坚持使用split的结果。

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

当然,我不会想到一个,我喜欢它。 – thomasfedb 2013-02-11 13:56:26

+1

因为'split'更具可读性和更快速http://ideone.com/6mJwCq – Hauleth 2013-02-11 15:16:43

+1

@ŁukaszNiemier为了便于阅读,我认为使用'gsub'更直接。它直接表达了这个概念:“扭转这些词”。为什么你需要说“分成单词,反向和加入”?此外,它使用更少的方法,这也意味着它更直接。至于速度,你使用'split'的版本更快,因为你没有给它一个参数。如果你想要很好的控制(即不是通过'“”分割),那么你需要执行split(/ \ W + /)或类似的操作,这使'split'比'gsub'更慢。 – sawa 2013-02-11 15:59:03

相关问题