【问题标题】:Ruby String TranslationRuby 字符串翻译
【发布时间】:2010-10-23 05:24:18
【问题描述】:

我想在我的编码字符串中找到每个元素的后继。例如 K->M A->C 等。

string.each_char do |ch| 
    dummy_string<< ch.succ.succ
end

但是,此方法转换为 y->aa。

Ruby 中有没有类似于 Python 中的 maketrans() 的方法?

【问题讨论】:

    标签: python ruby string


    【解决方案1】:

    您似乎在寻找String#tr。像这样使用:some_string.tr('a-zA-Z', 'c-zabC-ZAB')

    【讨论】:

    • z后面的ab是什么?我该如何解释?
    • 这基本上意味着字母 a-z 将被字母 c-z、a、然后 b 替换。由于范围 c-z 短了两个字符,显然您可以指定额外的字符。尽管如此,这似乎是非常奇怪的语法。不过很整洁。
    【解决方案2】:

    我不知道有什么副手,但我认为 Ruby 方式可能涉及将块传递给正则表达式函数。这是一个只适用于大写字母的笨蛋:

    "ABCYZ".gsub(/\w/) { |a| a=="Z" ? "A" : a.succ }
    => "BCDZA"
    

    编辑:嗯,没关系,听 Pesto,他听起来很聪明。

    【讨论】:

    • 没有所谓的Ruby方式。你可以在 Ruby 中走自己的路——这可能是 String#gsub 或 String#tr,或其他东西。请注意,String#tr 比带有块的 String#gsub 快得多。
    • 他们不称其为“Ruby 方式”,但您可以在 Ruby 代码中做一些事情,这些事情肯定会让您在 Ruby 会议上被嘲笑(或被侮辱)出局。我什至在 Ruby 会议上因为我的信仰受到了(身体上的)打击,所以我不同意“你可以在 Ruby 中走自己的路”:Ruby 程序员和任何其他群体一样保护他们的文化。
    【解决方案3】:
    def successor(s)
        s.tr('a-zA-Z','c-zabC-ZAB')
    end
    
    successor("Chris Doggett") #"Ejtku Fqiigvv"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-20
      • 2014-06-08
      • 2016-02-18
      相关资源
      最近更新 更多