エンコードされた文字列内の各要素の後続部分を探したいと思います。たとえば、K→M A→Cなど。Ruby String Translation
string.each_char do |ch|
dummy_string<< ch.succ.succ
end
しかし、この方法はy→aaを変換します。
Pythonのmaketrans()のようなRubyにはメソッドがありますか?
エンコードされた文字列内の各要素の後続部分を探したいと思います。たとえば、K→M A→Cなど。Ruby String Translation
string.each_char do |ch|
dummy_string<< ch.succ.succ
end
しかし、この方法はy→aaを変換します。
Pythonのmaketrans()のようなRubyにはメソッドがありますか?
あなたはString#trをお探しですか? some_string.tr('a-zA-Z', 'c-zabC-ZAB')
私には分かりませんが、Rubyのやり方では、ブロックを正規表現関数に渡すことが関係していると思います。
"ABCYZ".gsub(/\w/) { |a| a=="Z" ? "A" : a.succ }
=> "BCDZA"
編集:ここだけ大文字のために働くダム一つだMEH、ペストに耳を傾け、気にしないが、彼はスマートに聞こえます。
いわゆるRubyの方法はありません。あなたはRubyであなたの道を歩くことができます - これはString#gsubまたはString#trかもしれません。 String#trはString#gsubよりもはるかに高速であることに注意してください。 – pts
彼らはそれを「Rubyのやり方」とは呼んでいませんが、あなたがRubyの会議で部屋から笑ったり侮辱したりするRubyコードでできることは確かです。私は自分の信念のためにRubyミーティングで(物理的に)ヒットしてしまったので、「あなたはRubyであなたの道を歩くことができます」と同意しません。Rubyのプログラマーは他のグループと同じように彼らの文化を守ります。 – Ken
def successor(s)
s.tr('a-zA-Z','c-zabC-ZAB')
end
successor("Chris Doggett") #"Ejtku Fqiigvv"
zの後には何ですか?それをどのように解釈するのですか? – unj2
基本的には、文字a-zは文字c-z、a、bで置き換えられることを意味します。範囲c-zは2文字短いので、明らかに余分な文字を指定することができます。 まだ、それは非常に奇妙な構文のようです。ニート。 – Burke