Самый легкий способ преобразовать “a/b/c” в [“a/b/c”, “a/b”]

В Ruby я хотел бы преобразовать отдельную от наклонной черты Строку, такую как "foo/bar/baz" в ["foo/bar/baz", "нечто/панель", "нечто"]. У меня уже есть решения несколько строк долго; я ищу изящную остроту. Это также должно работать на произвольные числа сегментов (0 и).

7
задан Yehuda Katz 13 February 2010 в 09:09
поделиться

3 ответа

Ответ, получивший наибольшее количество голосов, работает, но вот несколько более короткий способ, который, я думаю, подойдет быть более читаемым для тех, кто не знаком со всеми используемыми там функциями:

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

Результат сохраняется в a :

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

Если порядок важен, вы можете изменить массив или использовать unshift вместо << .

Спасибо dkubb и OP за улучшения этого ответа.

4
ответ дан 6 December 2019 в 12:50
поделиться
"foo/bar/baz".enum_for(:scan, %r{/|$}).map {Regexp.last_match.pre_match}
12
ответ дан 6 December 2019 в 12:50
поделиться

Не так эффективно, как выбранный ответ, и дает [] , когда задана пустая строка, а не [""] , но это реальный однострочник: P

s.split('/').inject([]) { |a,d| a.unshift( [a.first,d].compact.join('/') ) }
0
ответ дан 6 December 2019 в 12:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: