Разделить значение и единицы в Ruby - PullRequest
0 голосов
/ 02 февраля 2010

Каков самый элегантный способ разделения значения и единиц, поэтому у вас есть:

13min.some_method["value"] = 13
13min.some_method["unit"] = "min"

Я думаю, что нужно использовать распаковку или разделение, но я могу заставить его работать!

Ответы [ 2 ]

8 голосов
/ 02 февраля 2010

Как насчет String # scan :

>> "13min".scan(/\d+|[^\d]+/)
=> ["13", "min"]

Другой способ:

>> i = "13min" =~ /[^\d]/
=> 2
>> "13min"[0,i]
=> "13"
>> "13min"[i,"13min".length]
=> "min"

Причина, по которой String # split не является лучшей, заключается в том, что она избавляется от разделителя, но две строки объединяются друг с другом.

2 голосов
/ 02 февраля 2010

Вот альтернативный вариант, который вы можете попробовать (который также будет работать с числами с плавающей запятой и отрицательными числами):

s = "-123.45min"

value = s.to_f          # => -123.45
unit = s[/[a-zA-Z]+/]   # => "min"

Как и метод to_f и to_i в Ruby, он просто "попытается" получить результат. Поэтому, если вы не предоставите единицу, unit будет nil - если вы предоставите только единицу, значение будет 0.

"123-34min"    value = 123,     unit = "min"
"min"          value = 0        unit = "min"
"-1234"        value = -1234    unit = nil
"123-foo-bar"  value = 123      unit = "foo"

P.S. Конечно, это предполагает, что в вашем отряде нет чисел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...