在Ruby中拆分值和单位

时间:2010-02-02 11:49:04

标签: ruby

分割价值和单位的最优雅方式是什么,所以你有:

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

我认为它应该使用解压缩或拆分,但我可以让它工作!

2 个答案:

答案 0 :(得分:8)

String#scan

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

另一种方式:

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

String#split不是最好的原因是因为它摆脱了分隔符,但是你的两个字符串相互对接。

答案 1 :(得分:2)

这是您可以尝试的替代方案(也可以使用浮点数和负数):

s = "-123.45min"

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

与Ruby的to_fto_i方法一样,它只是“尝试”获得结果。因此,如果您不提供单位,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。当然,这假设您的单位中没有任何数字。