【问题标题】:How do you get a multidimensional array?你如何得到一个多维数组?
【发布时间】:2016-05-19 14:12:51
【问题描述】:

我想知道如何从这个字符串创建一个维度数组:

str = "1 for R3, 2 for R7, 3 for R10, 5 for R14.50"

我想得到这个:

[[1, 3][2, 7][3, 10][5, 14.50]]

这是我的代码:

remove = str.gsub! ' for R', ' '
arr = remove.split ' ,'
arr.each do |x|
  puts x.split('R')
end

这是我得到的结果:

1 3
2 7
3 10
5 14.50

它没有给出预期的结果,我不知道我做错了什么。有人可以帮我吗?

【问题讨论】:

标签: ruby


【解决方案1】:
str.scan(/([\d.]+) for R([\d.]+)/)
# => [["1", "3"], ["2", "7"], ["3", "10"], ["5", "14.50"]]

str.scan(/([\d.]+) for R([\d.]+)/)
.map{|a| a.map{|s| s.to_i == s.to_f ? s.to_i : s.to_f}}
# => [[1, 3], [2, 7], [3, 10], [5, 14.5]]

【讨论】:

    【解决方案2】:
    str.scan(/[\d.]+/).each_slice(2).to_a
      #=> [["1", "3"], ["2", "7"], ["3", "10"], ["5", "14.50"]] 
    

    【讨论】:

      【解决方案3】:

      让我们开始irb 会话并检查发生了什么!所以首先,打开 shell 并启动 irb 交互式 ruby​​ 解释器。

      $ irb
      irb(main):001:0> 
      

      现在,让我们逐行执行代码,看看有没有我们怀疑的那样。

      irb(main):001:0> str = "1 for R3, 2 for R7, 3 for R10, 5 for R14.50"
      => "1 for R3, 2 for R7, 3 for R10, 5 for R14.50"
      
      irb(main):002:0> remove = str.gsub! ' for R', ' '
      => "1 3, 2 7, 3 10, 5 14.50"
      
      irb(main):003:0> arr = remove.split ' ,'
      => ["1 3, 2 7, 3 10, 5 14.50"]
      

      看起来问题就在这里,它返回了一个只有一个元素而不是四个元素的数组。让我们尝试用不同的字符串', '而不是' ,'分割。

      irb(main):004:0> arr = remove.split ', '
      => ["1 3", "2 7", "3 10", "5 14.50"]
      

      看起来更好!现在最后一部分按空格分割每个数组元素。

      irb(main):005:0> arr.map do |x|
      irb(main):006:1* x.split ' '
      irb(main):007:1> end
      => [["1", "3"], ["2", "7"], ["3", "10"], ["5", "14.50"]]
      

      您可能想要做的最后一件事是使用.to_i 方法将"1" 之类的字符串转换为数字,但这由您决定。

      总之,irb 是一个非常好的工具,当您想检查某件事的工作情况时。

      【讨论】:

        【解决方案4】:

        简短的非正则表达式:

        x = "1 for R3, 2 for R7, 3 for R10, 5 for R14.50"
        
        p x.split(', ').map{|x| x.split ' for R' } #=> [["1", "3"], ["2", "7"], ["3", "10"], ["5", "14.50"]]
        

        【讨论】:

          猜你喜欢
          • 2012-03-07
          • 1970-01-01
          • 1970-01-01
          • 2011-07-09
          • 2015-10-21
          • 1970-01-01
          • 2015-01-06
          • 1970-01-01
          • 2019-08-17
          相关资源
          最近更新 更多