【问题标题】:Reverse a string each two characters with Ruby用Ruby每两个字符反转一个字符串
【发布时间】:2014-04-08 16:37:00
【问题描述】:

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

输入:

"0123456789abcdef"

我期望的输出:

"efcdab8967452301"

【问题讨论】:

    标签: ruby string reverse


    【解决方案1】:

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

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

    【讨论】:

    • 差不多,去掉('') :-)
    【解决方案2】:
    "0123456789abcdef".gsub(/../, &:reverse).reverse
    # => "efcdab8967452301"
    

    【讨论】:

      【解决方案3】:

      你可以试试:

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

      【讨论】:

        【解决方案4】:

        我喜欢所有的解决方案,尤其是@sawa 的解决方案,但现在,六个小时后,想出一些不同的东西是一个挑战。为了多样性,我提供了一种使用成对替换的方法。这是破坏性的,所以我先复制字符串。

        代码

        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"
        

        每次调用block后如下:

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

        【讨论】:

          【解决方案5】:
          "0123456789abcdef".split('').each_slice(2).to_a.reverse.flatten.join('')
          
          => "efcdab8967452301"
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-06-26
            • 1970-01-01
            • 2012-04-03
            • 2020-09-04
            • 2015-06-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多