Порядковый разбор задачи - PullRequest
1 голос
/ 06 марта 2009

В Rails есть хорошая функция, ordinalize , которая преобразует целое число в дружественное строковое представление. А именно 1 становится 1-м, 2 становится 2-м, и так далее. У меня вопрос, как можно реализовать обратную функцию?

Чтобы быть более общим, я бы хотел рассмотреть оба следующих случая:

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

Я ищу умный способ сделать это, в отличие от гигантской таблицы поиска или просто взлома последних двух символов. Любые идеи будут оценены.

Ответы [ 2 ]

7 голосов
/ 06 марта 2009

to_i делает, по сути, половину этого:

"72nd".to_i
=> 72

Он не проверяет правильность, но если вам нужно потерпеть неудачу при неправильном вводе, таком как «72x», вы можете просто переопределить и сравнить с исходной строкой ввода.

Для разбора порядковых слов Википедия кажется чрезвычайно полезной .

0 голосов
/ 06 марта 2009

Первый случай относительно сложный - я бы сказал, что разумный способ сделать это - найти кого-то, кто уже сделал это, и использовать его код. Если вы не можете найти кого-то, следующая самая разумная вещь, вероятно, состоит в том, чтобы заново решить (или пересмотреть) проблему, чтобы она не была нужна. Помимо этого, я думаю, что вы в написании парсера ...

Второй случай так же тривиален, как уже предложенный to_i. Вы также можете использовать регулярное выражение, я полагаю:

"1000000th".scan(/\d+/).first.to_i #=> 1000000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...