我想知道如何从这个字符串创建一个维度数组:
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
它没有给出理想的结果,我不知道我做错了什么。有人能帮助我吗?
答案 0 :(得分: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]]
答案 1 :(得分:1)
str.scan(/[\d.]+/).each_slice(2).to_a
#=> [["1", "3"], ["2", "7"], ["3", "10"], ["5", "14.50"]]
答案 2 :(得分:0)
让我们开始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"]]
您可能要做的最后一件事是使用"1"
方法将.to_i
之类的字符串转换为数字,但我将此留给您。
总结irb
是一个非常好的工具,当您想要检查某些内容是如何工作的时候。
答案 3 :(得分:0)
短非正则表达式版本:
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"]]