是否有简单快速操作只是在不使用正则表达式的情况下去除ruby中路径目录的最后一个路径?
路径示例:
has="/my/to/somewhere/id"
wants="/my/to/somewhere"
目前我正在使用:
path.split('/')[0...-1].join('/')
对于has
我会永远知道id
,所以我也可以使用:
path.sub("/#{id}", '')
所以我的问题是,哪个操作更快?
答案 0 :(得分:4)
好吧,你可以使用Pathname#parent
方法。
require 'pathname'
Pathname.new("/my/to/somewhere/id").parent
# => #<Pathname:/my/to/somewhere>
Pathname.new("/my/to/somewhere/id").parent.to_s
# => "/my/to/somewhere"
答案 1 :(得分:2)
使用Pathname
比分裂快一点。在我的机器上,运行了一百万次:
require 'benchmark'
require 'pathname'
n = 1000000
id = "id"
Benchmark.bm do |x|
x.report("pathname: ") { n.times { Pathname("/my/to/somewhere/id").dirname.to_s } }
x.report("split:") { n.times { "/my/to/somewhere/id".split('/')[0...-1].join('/') } }
x.report("path.sub:") { n.times { "/my/to/somewhere/id".sub("/#{id}", '') } }
end
我得到了以下结果:
user system total real
pathname: 1.550000 0.000000 1.550000 ( 1.549925)
split: 1.810000 0.000000 1.810000 ( 1.806914)
path.sub: 1.030000 0.000000 1.030000 ( 1.030306)
答案 2 :(得分:1)
Pathname
- split有一种方法,其中:
返回数组中的dirname和basename。
require 'pathname'
Pathname.new("/my/to/somewhere/id").split.first.to_s
# => "/my/to/somewhere"
希望有所帮助!