将“a / b / c”转换为

在Ruby中,我想将一个斜杠分隔的字符串转换为[“foo / bar / baz”,“foo / bar”,“foo”]。 我已经有几行长的解决方案; 我正在寻找一个优雅的单线。 它还需要适用于任意数量的段(0和更高)。

最高投票的答案是有效的,但这是一个稍微简短的方法,我认为对那些不熟悉那里使用的所有function的人来说更具可读性:

 a=[]; s.scan(/\/|$/){a << $`} 

结果存储在:

 > s = 'abc/def/ghi' > a=[]; s.scan(/\/|$/){a << $`} > a ["abc", "abc/def", "abc/def/ghi"] 

如果顺序很重要,您可以反转数组或使用unshift而不是<<

感谢dkubb,以及OP对这个答案的改进。

 "foo/bar/baz".enum_for(:scan, %r{/|$}).map {Regexp.last_match.pre_match} 

不如选择的答案有效,并且在给出空字符串而不是[""]时给出[""] ,但它是一个真正的单行:P

 s.split('/').inject([]) { |a,d| a.unshift( [a.first,d].compact.join('/') ) } 
 ->(l,s,z){ ( t = s[/#{z}.[^\/]*/] ) && [l[l,s,t], t] }.tap{ |l| break l[l,'a/b/c',''] }.flatten.compact