【问题标题】:Ruby Array parsing (REGEX) [closed]Ruby 数组解析(REGEX)[关闭]
【发布时间】:2013-04-19 22:11:48
【问题描述】:

我在 ruby​​ 中有一个数组,其值如下:

arr

Value 1 : tb-5-atf, ac-23 
Value 2 : tb-5-atf, ac-5498
Value 3 : tb-5-atf, ac-236

我只想从中提取最后一个“-”之后的数字,即 23、5498、236。

【问题讨论】:

    标签: ruby-on-rails ruby regex arrays


    【解决方案1】:
    arr.map {|el| el.split('-').last}
    

    【讨论】:

      【解决方案2】:

      我很懒:

      [
        'Value 1 : tb-5-atf, ac-23',
        'Value 2 : tb-5-atf, ac-5498',
        'Value 3 : tb-5-atf, ac-236'
      ].map{ |r| r[/-(\d+)$/, 1] }
      

      返回:

      [
          [0] "23",
          [1] "5498",
          [2] "236"
      ]
      

      如果你想要整数值:

      [
        'Value 1 : tb-5-atf, ac-23',
        'Value 2 : tb-5-atf, ac-5498',
        'Value 3 : tb-5-atf, ac-236'
      ].map{ |r| r[/-(\d+)$/, 1].to_i }
      

      返回:

      [ [0] 23, [1] 5498, [2] 236 ]

      虽然可以使用split('-')scan 执行此操作,但这样做会生成临时数组,然后将它们丢弃,浪费CPU 周期或导致代码在尝试解开数组时不简单。

      【讨论】:

        【解决方案3】:

        我认为这很简单,您应该在 google 上搜索一下关于 ruby​​ 字符串的信息。但是你需要这样的东西

        arr[i].split("-").last.to_i
        

        我在 irb 上试过这个

        1.9.3p194 :003 > "tb-5-atf, ac-23".split("-").last.to_i
        => 23
        

        【讨论】:

          【解决方案4】:

          也许是这样的:

          a = [["tb-5-atf", "ac-23"],["tb-5-atf", "ac-5498"], ["tb-5-atf", "ac-236"] ]
          
          r = a.map { |i|  i.last.split("-").last.to_i }
          p r # output => [23, 5498, 236]
          

          【讨论】:

            【解决方案5】:

            我觉得这样做很有趣:

            arr.map{|v| v.reverse.to_i.to_s.reverse.to_i}
            

            (不要在生产中使用它,这只是另一种思考方式。)

            【讨论】:

              猜你喜欢
              • 2022-01-10
              • 2013-06-10
              • 2018-07-30
              • 2020-09-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-06-23
              相关资源
              最近更新 更多