使用Ruby将每两个字符反转一个字符串

时间:2014-04-08 16:37:01

标签: ruby string reverse

我想用Ruby反转每两个字符的字符串。

输入:

"0123456789abcdef"

我期望的输出:

"efcdab8967452301"

5 个答案:

答案 0 :(得分:3)

我不确定这是否是最好的方法:

"0123456789abcdef".scan(/../).reverse.join == "efcdab8967452301"

答案 1 :(得分:3)

"0123456789abcdef".gsub(/../, &:reverse).reverse
# => "efcdab8967452301"

答案 2 :(得分:2)

您可以尝试:

"0123456789abcdef".chars.each_slice(2).to_a.reverse.join

答案 3 :(得分:1)

我喜欢所有的解决方案,尤其是@ sawa's,但现在,六个小时之后,提出不同的东西是一项挑战。为了多样性,我提供了一种使用成对替代的方法。它具有破坏性,所以我首先要制作一个字符串副本。

<强>代码

str = "0123456789abcdef"
s = str.dup
(0...s.size/2).step(2) { |i| s[i,2], s[-i-2,2] = s[-i-2,2], s[i,2] }
  s #=> "efcdab8967452301"

<强>解释

enum = (0...s.size/2).step(2) #=> #<Enumerator: 0...8:step(2)>

我们可以看到枚举的内容:

enum.to_a                     #=> [0, 2, 4, 6]

字符串

s #=> "0123456789abcdef"
每次调用块后

如下:

i = 0: "ef23456789abcd01" 
i = 2: "efcd456789ab2301" 
i = 4: "efcdab6789452301" 
i = 6: "efcdab8967452301" 

答案 4 :(得分:1)

"0123456789abcdef".split('').each_slice(2).to_a.reverse.flatten.join('')

=> "efcdab8967452301"