2011-11-23 13 views
0

できるだけ少ないコードでRubyの問題を解決しようとしています:)。私は、指定された文字列がさまざまな数のシンボルで始まっているかどうかをチェックしたいと思います。 reg expを使うのは簡単ですが、string.match(\^a {1,3}。* \)と書くことができます。しかし、それから、文字列の正確な数に応じて文字列を変更する必要があります。どのように私はそのような者の場合は3を使用せずにそれらを検出することができます事前に文字列の先頭にある特定のシンボルの正確な数を見つける

do_string_manipulation1 if string.match(/^a.*/) 
do_string_manupulation2 if string.match(/^aa.*/) 
... 

おかげで:)

答えて

1

がなぜ最初の正規表現の修正バージョンを使用しないと、単にそれを返します数えますか?もちろんラ

m = string.match(/^(a{1,3})/) 
case m[1].size 
    when 1 
    when 2 
    when 3 
end 

あなたも数に応じて、呼び出すためのルーチンを格納するための配列を使用することができます。

routines = [nil, method(:do_string_manipulation1), method(:do_string_manipulation2), ...] 
routines[m[1].size].call 
+0

ありがとうございます。 「一致」が返ってくるかどうかわからない – mjekov

+0

MatchDataオブジェクト(http://rubydoc.info/stdlib/core/1.9.3/MatchData –

+0

)また、=〜演算子を使用して、グローバル変数$ 1(この場合、一般に$ 1 .. $ nです)。その利点は、MatchDataオブジェクトを作成する必要がないため、処理が高速であることです。 –

1

は、あなたの文字列操作が何であるかに依存します。

次の操作を行うことにより、連続した者の数を決定することができます。だから私のコードがある

"a" - downcase 
"aa" - reverse 
"aaa" - swapcase 

string.send([:downcase, :reverse, :swapcase][string.match(/^(a{1,3}).*/)[1].size-1]) 

string.match(/^(a{1,3}).*/)[1].size 

をあなたはルールを定義していないので、鉱山があります

ルールがより複雑な場合は、それらをクラスのメソッドとして定義し、それらをth​​に応じて呼び出すことができますe番号が返されました。

関連する問題