2009-03-06 11 views
0

Railsには素敵な関数ordinalizeがあり、整数をフレンドリな文字列表現に変換します。つまり、1が1に、2が2に、などとなります。私の質問は、どのようにインバース機能を実装するのですか?序数解析の問題

>> s = "First" 
>> s.integerize 
=> 1 
>> s = 1st 
>> s.integerize 
=> 1 

私は巨大なルックアップテーブルとは対照的に、これを行うためのスマートな方法を探しているか、単に最後をオフにハッキングしています:私は、次の例の両方を処理したいのですが、より一般的には

2文字。任意のアイデアをいただければ幸いです。

答えて

7

to_iは、本質的にその1/2を行います

"72nd".to_i 
=> 72 

それは妥当性をチェックしませんが、あなたが「72X」などの不正な入力に失敗する必要がある場合は、あなただけ-ordinalizeを再とに比較することができます元の入力文字列

序文を解析する場合は、Wikipedia seems impressively helpfulです。

0

最初のケースは比較的難しいです - 私はそれを行うスマートな方法は、すでにそれをやって、コードを使用して誰かを見つけることだと思います。あなたが誰かを見つけることができない場合は、次の最も賢いことは、おそらく問題がないように、問題を再作成(または再交渉)することでしょう。それを超えて、私はあなたがパーサーライティングになっていると思う。

2番目のケースは既に提供されているto_iと同じくらい些細なものだ。正規表現を使用することもできます。

"1000000th".scan(/\d+/).first.to_i #=> 1000000