代码之家  ›  专栏  ›  技术社区  ›  Victor

用Ruby拆分值和单位

  •  0
  • Victor  · 技术社区  · 15 年前

    分割值和单位最优雅的方法是什么,所以您有:

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

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

    2 回复  |  直到 15 年前
        1
  •  8
  •   Josh Lee ZZ Coder    15 年前

    怎么样 String#scan :

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

    另一种方式:

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

    之所以字符串分割不是最好的,是因为它去掉了分隔符,但您的两个字符串相互对接。

        2
  •  2
  •   Marcel Jackwerth    15 年前

    这里有一个你可以尝试的替代方法(它也适用于浮点数和负数):

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

    像红宝石一样 to_f to_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"
    

    当然,这是假设你的单位中没有任何数字。