2017-11-21 9 views
2

文字が変更されたときに文字列を分割したいと思います。たとえば"aabbbc226%%*"については文字が前の文字と異なる場合にルビーの分割文字

は、私が今持っているものHERESにこの["aa", "bbb", "c", "22", "6", "%%", "*"]

のような配列に分割する必要があります

def split_when_char_change(str) 
    array = Array.new 
    chars = str.split('') 
    chars.each { |c| 
    array.push c 
    } 
    array 
end 

split_when_char_change( "aabbbc226 %% *")

私はこれを取得しています出力:["a", "a", "b", "b", "b", "c", "2", "2", "6", "%", "%", "*"]が間違っています。

希望するアレイを取得するにはどうすればよいですか?ここで

+0

私は質問がよりexplcit作ら@sawa – RubyNewby

答えて

4

chunkmapjoinを使用して1つのライナーです:

"aabbbc226%%*".chars.chunk(&:itself).map{|_,c| c.join} 
# => ["aa", "bbb", "c", "22", "6", "%%", "*"] 
1
"aabbbc226%%*".scan(/((.)\2*)/).to_h.keys 
# => ["aa", "bbb", "c", "22", "6", "%%", "*"] 

または

"aabbbc226%%*".scan(/((.)\2*)/).map(&:first) 
# => ["aa", "bbb", "c", "22", "6", "%%", "*"] 
関連する問題