В Ruby я хотел бы преобразовать отдельную от наклонной черты Строку, такую как "foo/bar/baz" в ["foo/bar/baz", "нечто/панель", "нечто"]. У меня уже есть решения несколько строк долго; я ищу изящную остроту. Это также должно работать на произвольные числа сегментов (0 и).
Ответ, получивший наибольшее количество голосов, работает, но вот несколько более короткий способ, который, я думаю, подойдет быть более читаемым для тех, кто не знаком со всеми используемыми там функциями:
a=[]; s.scan(/\/|$/){a << $`}
Результат сохраняется в 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('/') ) }