2009-05-01 113 views
2

我想在我的編碼字符串中找到每個元素的後繼者。例如K-> M A-> C等。Ruby字符串翻譯

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

然而,這種方法翻譯y-> aa。

Ruby中的方法是否像Python中的maketrans()一樣?

回答

9

您好像在尋找String#tr。使用像這樣:some_string.tr('a-zA-Z', 'c-zabC-ZAB')

+0

z之後有什麼ab?我如何解釋? – unj2 2009-05-01 21:29:34

+0

它基本上意味着字母a-z將被字母c-z,a和b代替。由於範圍c-z縮短了兩個字符,顯然你可以指定額外的字符。 儘管如此,這似乎是非常奇怪的語法。儘管如此。 – Burke 2009-05-02 11:28:33

0

我不知道一個副手,但我認爲Ruby的方式可能會涉及到一個塊傳遞給正則表達式函數。這是一個愚蠢的,只適用於大寫字母:

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

編輯:meh,沒關係,聽Pesto,他聽起來很聰明。

+0

沒有所謂的Ruby方式。你可以在Ruby中走路 - 可能是String#gsub或String#tr,或其他東西。請注意,String#tr比帶塊的String#gsub快得多。 – pts 2009-05-01 20:46:38

+0

他們不稱之爲「Ruby方式」,但在Ruby代碼中你肯定可以做的事情會讓你在Ruby會議中笑出(或被侮辱)出房間。我甚至在Ruby會議上(因爲我的觀點)受到了打擊,所以我不同意「你可以在Ruby中走路」:Ruby程序員像其他任何團隊一樣保護他們的文化。 – Ken 2009-05-02 02:49:07

1
def successor(s) 
    s.tr('a-zA-Z','c-zabC-ZAB') 
end 

successor("Chris Doggett") #"Ejtku Fqiigvv"