将“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