Разбить строку на массив на основе последовательных символов - PullRequest
1 голос
/ 24 января 2011

Я уже некоторое время ищу ответ на этот вопрос в Ruby и не нашел хорошего решения. Я пытаюсь понять, как разбить строку, когда следующий символ не совпадает с предыдущим, и передать группировки в массив. то есть.

'aaaabbbbzzxxxhhnnppp'

становится

['aaaa', 'bbbb', 'zz', 'xxx', 'hh', 'nn', 'ppp']

Я знаю, что мог бы просто перебирать каждый символ в строке и проверять наличие изменений, но мне любопытно, есть ли что-нибудь встроенное, что могло бы справиться с этим элегантным способом.

1 Ответ

5 голосов
/ 24 января 2011

Выполняется с помощью простого регулярного выражения:

'aaaabbbbzzxxxhhnnppp'.scan(/((.)\2*)/).map{|x| x[0]}
=> ["aaaa", "bbbb", "zz", "xxx", "hh", "nn", "ppp"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...