首页 > 解决方案 > Ruby:解析长字符串

问题描述

字符串有重复的值 - 我想以相同的顺序提取值

str = %q(
a
a
b
a
)
a = str.split
new_value = a[0]
flip_flop = ""
s1, s2 = "", ""
a.each{|e|
    if e == flip_flop
    s1 << e
    flip_flop = e
else
    s2 << e
    flip_flop = e
end
}
p s1 # should be aaa
p s2 # should be b

预期值:s1 应该是“aaa”,s2 应该是“b”。更现实的例子:String = "xblah\nxmoreblah\nyfoo\nzbar\nxmoredata\nxblah"。预期:“xblahmoreblah\nyfoo\nzbar\nxmoredatablah”。

字符串 = "ablah\namoreblah\nbfoo\nablahend" 预期 = "ablahmoreblah\nfoo\nablahend"

标签: ruby

解决方案


我认为您的原始示例(a,a,b,a)=>(a,a,a),(b)不关心序列,在这种情况下您可以使用

str.split.group_by(&:itself).values.map(&:join)
 => ["aaa", "b"]

如果您确实关心序列,正如您的下一个示例所建议的那样,并且您希望它实际(a,a),(b),(a)返回

str.split.chunk{ |n| n }.map {|a| a.last.join}
 => ["aa", "b", "a"] 

推荐阅读