ruby - 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"
解决方案
我认为您的原始示例(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"]
推荐阅读
- python - 关于全连接网络的特殊 Keras 问题
- caching - 如何使用 Vercel/Next.js 改进字体加载/缓存?
- node.js - 用户如何使用 sequelize postgres nodejs 互相喜欢和不同?
- delphi - 使用 Delphi 对图像使用 Canny 效果或显示边框
- typescript - 清理多个 if else 语句
- pandas - 使用 Pandas dataFrame 拆分日期复杂格式
- javascript - ReactJs 变量返回静态文本
- python - 对不同类中的对象使用相同的绑定键
- extjs - 我的视口容器根本没有响应
- css - 什么控制 CSS 变换的水平移动?